]> git.ipfire.org Git - thirdparty/asterisk.git/log
thirdparty/asterisk.git
8 years agores_agi: Prevent crash when SET VARIABLE called without arguments
Sean Bright [Tue, 23 May 2017 18:06:22 +0000 (14:06 -0400)] 
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

8 years agoMerge "res_pjsip_session : fixed wrong From Header number On Re-invite"
Joshua Colp [Tue, 23 May 2017 14:17:13 +0000 (09:17 -0500)] 
Merge "res_pjsip_session : fixed wrong From Header number On Re-invite"

8 years agoMerge "app_queue: Fix duplicate queue_log entries for EXITEMPTY and ABANDON"
Joshua Colp [Mon, 22 May 2017 10:37:32 +0000 (05:37 -0500)] 
Merge "app_queue: Fix duplicate queue_log entries for EXITEMPTY and ABANDON"

8 years agoMerge "app_stream_echo: Added a multi-stream echo application"
Joshua Colp [Mon, 22 May 2017 10:03:05 +0000 (05:03 -0500)] 
Merge "app_stream_echo: Added a multi-stream echo application"

8 years agoMerge "core/conversions: Added string to unsigned integer and long conversions"
Jenkins2 [Mon, 22 May 2017 09:59:49 +0000 (04:59 -0500)] 
Merge "core/conversions: Added string to unsigned integer and long conversions"

8 years agoMerge "res_hep_rtcp: Add support level to module info"
Jenkins2 [Fri, 19 May 2017 23:19:01 +0000 (18:19 -0500)] 
Merge "res_hep_rtcp: Add support level to module info"

8 years agoMerge "AST-2017-004: chan_skinny: Add EOF check in skinny_session"
Jenkins2 [Fri, 19 May 2017 20:08:42 +0000 (15:08 -0500)] 
Merge "AST-2017-004: chan_skinny:  Add EOF check in skinny_session"

8 years agoMerge "AST-2017-003: Handle zero-length body parts correctly."
Jenkins2 [Fri, 19 May 2017 19:41:50 +0000 (14:41 -0500)] 
Merge "AST-2017-003: Handle zero-length body parts correctly."

8 years agoAST-2017-003: Handle zero-length body parts correctly.
Mark Michelson [Thu, 13 Apr 2017 22:17:36 +0000 (17:17 -0500)] 
AST-2017-003: Handle zero-length body parts correctly.

ASTERISK-26939 #close

Change-Id: I7ea235ab39833a187db4e078f0788bd0af0a24fd

8 years agoAST-2017-004: chan_skinny: Add EOF check in skinny_session
George Joseph [Thu, 13 Apr 2017 16:14:48 +0000 (10:14 -0600)] 
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

8 years agoAST-2017-002: Ensure transaction key buffer is large enough.
Mark Michelson [Thu, 13 Apr 2017 22:16:42 +0000 (17:16 -0500)] 
AST-2017-002: Ensure transaction key buffer is large enough.

ASTERISK-26938 #close

Change-Id: I266490792fd8896a23be7cb92f316b7e69356413

8 years agores_hep_rtcp: Add support level to module info
Sean Bright [Thu, 18 May 2017 21:35:21 +0000 (17:35 -0400)] 
res_hep_rtcp: Add support level to module info

Change-Id: I5661478f9cf12d431f730e42be79323b62831e92

8 years agoapp_stream_echo: Added a multi-stream echo application
Kevin Harwell [Mon, 15 May 2017 18:26:50 +0000 (13:26 -0500)] 
app_stream_echo: Added a multi-stream echo application

If the channel does not have multi-stream support then this application acts
just like app_echo. If it does have multi-stream support then each stream is
echoed back to itself (one-to-one).

If a "num" is specified, then a new topology is made that contains clones (from
the channel's topology) of all media types that are not equal to the given
"type". If the media type differs then the first stream matching the "type" is
cloned into the new topology and then up to "num" - 1 of the same stream are
also cloned into it. Any additional streams from the original topology matching
the "type" are subsequently ignored (i.e. not added to the new topology).

For this same case when a frame is read from a stream that frame is still
echoed back like before, but now that frame is also echoed out to the
additional streams that matched on the specified "type".

ASTERISK-26997 #close

Change-Id: I254144486734178e196c7f590a26ffc13543ff2c

8 years agocore/conversions: Added string to unsigned integer and long conversions
Kevin Harwell [Mon, 15 May 2017 18:25:43 +0000 (13:25 -0500)] 
core/conversions: Added string to unsigned integer and long conversions

Added functions that convert a string to an unsigned integer or unsigned long.
A couple of unit test were also created to test the routines. The reasons for
adding these conversion utilities (and hopefully eventually more) are as
follows:

  * Conversion routines are functionally contained with consistent and
    better error checking
  * The function names offer a better description of what is happening
  * It encourages code reuse for easier bug fixing at a single source
  * It's simpler to use
  * It's unit testable

For instance, currently in a lot of places when converting to an integer or
similar the "sscanf" function is used. When using "sscanf" it may not be
immediately clear what's happening as it lacks semantic naming. Limited error
checking is usually done as well. For example, most of the time a check is done
to make sure the value converted, but does not check for overflows or negative
valued conversions when converting unsigned numbers.

Why use/wrap "strtoul" and not "sscanf" then? Primarily, it lacks some of the
built in error handling that "strtoul" has. For instance "strtoul" contains
overflow checks. Less so, but can still factor as reasons, "sscanf" is slightly
more complex in its use. And maybe a bit controversial, but it may be ("big if")
potentially slower than "strtoul" in some cases.

Change-Id: If7eaca4a48f8c7b89cc8b5a1f4bed2852fca82bb

8 years agoMerge "res_pjsip_session.c: Process initial INVITE sooner. (key exists)"
Jenkins2 [Wed, 17 May 2017 16:40:28 +0000 (11:40 -0500)] 
Merge "res_pjsip_session.c: Process initial INVITE sooner. (key exists)"

8 years agoMerge "Fix spelling queues.conf.sample file"
Joshua Colp [Wed, 17 May 2017 15:40:11 +0000 (10:40 -0500)] 
Merge "Fix spelling queues.conf.sample file"

8 years agores_pjsip_session.c: Process initial INVITE sooner. (key exists)
Richard Mudgett [Sat, 13 May 2017 02:04:59 +0000 (21:04 -0500)] 
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

8 years agoMerge "chan_sip: Change sip_get_codec() to return correct codec list"
Joshua Colp [Mon, 15 May 2017 14:28:11 +0000 (09:28 -0500)] 
Merge "chan_sip: Change sip_get_codec() to return correct codec list"

8 years agoFix spelling queues.conf.sample file
Rodrigo Ramírez Norambuena [Sun, 14 May 2017 05:37:09 +0000 (01:37 -0400)] 
Fix spelling queues.conf.sample file

Change-Id: Ie1c2d83af66f27a449da09a68d987e0992627fee

8 years agoMerge changes from topic 'sdp_api_adjustments'
George Joseph [Fri, 12 May 2017 17:29:39 +0000 (12:29 -0500)] 
Merge changes from topic 'sdp_api_adjustments'

* changes:
  SDP: Make process possible multiple fmtp attributes per rtpmap.
  SDP: Explicitly stop a RTP instance before destoying it.
  SDP: Rework merge_capabilities().
  SDP: Update ast_get_topology_from_sdp() to keep RTP map.

8 years agoMerge "SDP: Remove sdp_state.remote_capabilities"
George Joseph [Fri, 12 May 2017 17:29:15 +0000 (12:29 -0500)] 
Merge "SDP: Remove sdp_state.remote_capabilities"

8 years agoMerge "SDP: Add interface_address to specify our address to use."
Jenkins2 [Fri, 12 May 2017 16:49:58 +0000 (11:49 -0500)] 
Merge "SDP: Add interface_address to specify our address to use."

8 years agochan_sip: Change sip_get_codec() to return correct codec list
Vitezslav Novy [Mon, 8 May 2017 18:40:47 +0000 (20:40 +0200)] 
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

8 years agoMerge "res_hep_rtcp: Provide chan_sip Call-ID for RTCP messages."
Jenkins2 [Thu, 11 May 2017 21:39:54 +0000 (16:39 -0500)] 
Merge "res_hep_rtcp: Provide chan_sip Call-ID for RTCP messages."

8 years agoMerge "logger: Added logger_queue_limit to the configuration options."
Jenkins2 [Thu, 11 May 2017 17:03:07 +0000 (12:03 -0500)] 
Merge "logger:  Added logger_queue_limit to the configuration options."

8 years agoMerge "tcptls: Improve error messages for TLS connections."
Jenkins2 [Thu, 11 May 2017 15:46:15 +0000 (10:46 -0500)] 
Merge "tcptls: Improve error messages for TLS connections."

8 years agoMerge "Prevent Undefined Capath Crash"
Jenkins2 [Thu, 11 May 2017 15:38:38 +0000 (10:38 -0500)] 
Merge "Prevent Undefined Capath Crash"

8 years agoapp_queue: Fix duplicate queue_log entries for EXITEMPTY and ABANDON
Ivan Poddubny [Thu, 11 May 2017 05:25:44 +0000 (07:25 +0200)] 
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

8 years agoSDP: Make process possible multiple fmtp attributes per rtpmap.
Richard Mudgett [Fri, 28 Apr 2017 00:37:53 +0000 (19:37 -0500)] 
SDP: Make process possible multiple fmtp attributes per rtpmap.

Change-Id: Ie7511008d82b59590e0eb520a21b5e1da4bd7349

8 years agoSDP: Remove sdp_state.remote_capabilities
Richard Mudgett [Fri, 28 Apr 2017 16:53:37 +0000 (11:53 -0500)] 
SDP: Remove sdp_state.remote_capabilities

The sdp_state.remote_capabilities was only used inside merge_sdps() and
subsequent calls to merge_sdps() by re-INVITE's would leak them.

Change-Id: I0ceb7838ea044cc913e8ad4a255c39c9740ae0ce

8 years agoSDP: Add interface_address to specify our address to use.
Richard Mudgett [Fri, 5 May 2017 19:30:40 +0000 (14:30 -0500)] 
SDP: Add interface_address to specify our address to use.

When we optionally set the interface_address we are forcing the media to
go out a specific interface address.  This allows us to optionally have
the media go out the interface that SIP signalling came in on or if we are
configured to have the media always go out a specific address.

Change-Id: I160d9fac322a075bd2557b430632544178196189

8 years agoSDP: Explicitly stop a RTP instance before destoying it.
Richard Mudgett [Fri, 5 May 2017 19:49:30 +0000 (14:49 -0500)] 
SDP: Explicitly stop a RTP instance before destoying it.

* Made sdp_add_m_from_rtp_stream() and sdp_add_m_from_udptl_stream()
handle generating disabled/declined streams.

* Added /main/sdp/sdp_merge_asymmetric unit test.  It currently does not
check the offerer side negotiated SDP because that isn't the purpose of
this patch and there is much to be done to handle declined/dummy streams.

* Added T.38 image streams to the /main/sdp/sdp_merge_symmetric and
/main/sdp/sdp_merge_crisscross unit tests.

Change-Id: Ib4dcb3ca4f9a9133b376f4e3302f9a1f963f2b31

8 years agoSDP: Rework merge_capabilities().
Richard Mudgett [Sat, 29 Apr 2017 00:48:29 +0000 (19:48 -0500)] 
SDP: Rework merge_capabilities().

* Tried to give better variable names.
* Made our SDP answer use the offer's RTP payload types as the SDP RFC
says we SHOULD.
* Updating the local topology now takes the stream format caps.  We are
likely preparing to send an offer.

Change-Id: I34d3be8e3036402a8575ffcae3eebc5ce348d7c0

8 years agoSDP: Update ast_get_topology_from_sdp() to keep RTP map.
Richard Mudgett [Fri, 28 Apr 2017 17:30:34 +0000 (12:30 -0500)] 
SDP: Update ast_get_topology_from_sdp() to keep RTP map.

* Add failure exits to ast_get_topology_from_sdp().

Change-Id: I4cc85c1ede8d712766ed20f544dbcef04c8c1049

8 years agotcptls: Improve error messages for TLS connections.
Joshua Colp [Tue, 9 May 2017 15:34:49 +0000 (15:34 +0000)] 
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

8 years agoPrevent Undefined Capath Crash
Joshua Elson [Thu, 4 May 2017 22:28:55 +0000 (18:28 -0400)] 
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

8 years agocel_odbc: Fix timestamp processing for microseconds
George Joseph [Fri, 5 May 2017 16:33:34 +0000 (10:33 -0600)] 
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

8 years agores_hep_rtcp: Provide chan_sip Call-ID for RTCP messages.
Joshua Colp [Tue, 9 May 2017 10:25:29 +0000 (10:25 +0000)] 
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

8 years agoMerge "func_cdr: Allow empty value for CDR dialplan function."
Joshua Colp [Mon, 8 May 2017 23:35:13 +0000 (18:35 -0500)] 
Merge "func_cdr: Allow empty value for CDR dialplan function."

8 years agoMerge "stream: ast_stream_clone() cannot copy the opaque user data."
Joshua Colp [Mon, 8 May 2017 22:25:22 +0000 (17:25 -0500)] 
Merge "stream: ast_stream_clone() cannot copy the opaque user data."

8 years agologger: Added logger_queue_limit to the configuration options.
George Joseph [Mon, 8 May 2017 21:11:19 +0000 (15:11 -0600)] 
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

8 years agoMerge "netsock2.c: Made get/set addr port avoid potential uninitialized memory."
Joshua Colp [Mon, 8 May 2017 13:44:22 +0000 (08:44 -0500)] 
Merge "netsock2.c: Made get/set addr port avoid potential uninitialized memory."

8 years agoMerge "bridge: Fix returning to dialplan when executing Bridge() from AMI."
Joshua Colp [Mon, 8 May 2017 12:33:07 +0000 (07:33 -0500)] 
Merge "bridge: Fix returning to dialplan when executing Bridge() from AMI."

8 years agostream: ast_stream_clone() cannot copy the opaque user data.
Richard Mudgett [Tue, 2 May 2017 23:05:01 +0000 (18:05 -0500)] 
stream: ast_stream_clone() cannot copy the opaque user data.

ast_stream_clone() cannot copy the opaque user data stored on a stream.
We don't know how to clone the data so it isn't copied into the clone.

Change-Id: Ia51321bf38ecbfdcc53787ca77ea5fd2cabdf367

8 years agonetsock2.c: Made get/set addr port avoid potential uninitialized memory.
Richard Mudgett [Thu, 4 May 2017 22:32:03 +0000 (17:32 -0500)] 
netsock2.c: Made get/set addr port avoid potential uninitialized memory.

Change-Id: I532052bd7cd95a4b3565485fc01e2a1ea07ee647

8 years agofunc_cdr: Allow empty value for CDR dialplan function.
Joshua Colp [Fri, 5 May 2017 13:48:34 +0000 (13:48 +0000)] 
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

8 years agoapp_confbridge: Fix reference to cfg in menu_template_handler
George Joseph [Thu, 4 May 2017 21:04:46 +0000 (15:04 -0600)] 
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

8 years agoMerge "SDP: Replace SDP telephone_event option with dtmf option"
Jenkins2 [Fri, 5 May 2017 00:17:06 +0000 (19:17 -0500)] 
Merge "SDP: Replace SDP telephone_event option with dtmf option"

8 years agoMerge "res_rtp_asterisk: Clearing the remote RTCP address causes RTCP failures"
Jenkins2 [Thu, 4 May 2017 22:55:54 +0000 (17:55 -0500)] 
Merge "res_rtp_asterisk: Clearing the remote RTCP address causes RTCP failures"

8 years agobridge: Fix returning to dialplan when executing Bridge() from AMI.
Joshua Colp [Sun, 30 Apr 2017 21:40:16 +0000 (21:40 +0000)] 
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

8 years agobridge_simple: Added support for streams
Kevin Harwell [Tue, 25 Apr 2017 16:49:16 +0000 (11:49 -0500)] 
bridge_simple: Added support for streams

This patch is the first cut at adding stream support to the bridging framework.
Changes were made to the framework that allows mapping of stream topologies to
a bridge's supported media types.

The first channel to enter a bridge initially defines the media types for a
bridge (i.e. a one to one mapping is created between the bridge and the first
channel). Subsequently added channels merge their media types into the bridge's
adding to it when necessary. This allows channels with different sized
topologies to map correctly to each other according to media type. The bridge
drops any frame that does not have a matching index into a given write stream.

For now though, bridge_simple will align its two channels according to size or
first to join. Once both channels join the bridge the one with the most streams
will indicate to the other channel to update its streams to be the same as that
of the other. If both channels have the same number of streams then the first
channel to join is chosen as the stream base.

A topology change source was also added to a channel when a stream toplogy
change request is made. This allows subsystems to know whether or not they
initiated a change request. Thus avoiding potential recursive situations.

ASTERISK-26966 #close

Change-Id: I1eb5987921dd80c3cdcf52accc136393ca2d4163

8 years agores_rtp_asterisk: Clearing the remote RTCP address causes RTCP failures
Kevin Harwell [Mon, 1 May 2017 18:04:16 +0000 (13:04 -0500)] 
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

8 years agoMerge "channels/chan_sip.c: use binding IP address for outgoing TCP SIP connections"
Joshua Colp [Wed, 3 May 2017 16:05:35 +0000 (11:05 -0500)] 
Merge "channels/chan_sip.c: use binding IP address for outgoing TCP SIP connections"

8 years agocleanup: Change severity of fread short-read warning
Sean Bright [Tue, 2 May 2017 16:34:24 +0000 (12:34 -0400)] 
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

8 years agoSDP: Replace SDP telephone_event option with dtmf option
Richard Mudgett [Wed, 26 Apr 2017 21:22:38 +0000 (16:22 -0500)] 
SDP: Replace SDP telephone_event option with dtmf option

The telephone_event option was used as a flag and a bit mapped value in
different places when it is a boolean.  It is also inadequate to configure
the DTMF operation of the RTP instance created for the stream.

Change-Id: Ib1addeaf0ce86f07039f2f979cab29405dc5239b

8 years agoMerge "res_pjsip_t38.c: Fix deadlock in T.38 framehook."
Jenkins2 [Tue, 2 May 2017 14:22:24 +0000 (09:22 -0500)] 
Merge "res_pjsip_t38.c: Fix deadlock in T.38 framehook."

8 years agoMerge "res_sdp_translator_pjmedia.c: Add TODO notes."
Joshua Colp [Tue, 2 May 2017 10:20:03 +0000 (05:20 -0500)] 
Merge "res_sdp_translator_pjmedia.c: Add TODO notes."

8 years agoMerge "SDP: Make SDP translation to/from internal representation more const."
Joshua Colp [Tue, 2 May 2017 10:19:59 +0000 (05:19 -0500)] 
Merge "SDP: Make SDP translation to/from internal representation more const."

8 years agoMerge "stream: Make ast_stream_topology_create_from_format_cap() allow NULL cap."
Joshua Colp [Tue, 2 May 2017 10:19:12 +0000 (05:19 -0500)] 
Merge "stream: Make ast_stream_topology_create_from_format_cap() allow NULL cap."

8 years agoMerge "SDP: Make ast_sdp_state_set_remote_sdp() return error."
Jenkins2 [Mon, 1 May 2017 22:01:20 +0000 (17:01 -0500)] 
Merge "SDP: Make ast_sdp_state_set_remote_sdp() return error."

8 years agoMerge "res_pjsip_outbound_authenticator_digest: Add context to log messages"
Jenkins2 [Mon, 1 May 2017 20:08:21 +0000 (15:08 -0500)] 
Merge "res_pjsip_outbound_authenticator_digest: Add context to log messages"

8 years agoMerge "SDP: Misc cleanups (Mostly memory leaks)"
Jenkins2 [Mon, 1 May 2017 19:19:34 +0000 (14:19 -0500)] 
Merge "SDP: Misc cleanups (Mostly memory leaks)"

8 years agoMerge "SDP API: Add SSRC-level attributes"
Jenkins2 [Mon, 1 May 2017 19:16:55 +0000 (14:16 -0500)] 
Merge "SDP API: Add SSRC-level attributes"

8 years agores_pjsip_t38.c: Fix deadlock in T.38 framehook.
Richard Mudgett [Sat, 29 Apr 2017 21:11:21 +0000 (16:11 -0500)] 
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

8 years agores_pjsip_outbound_authenticator_digest: Add context to log messages
George Joseph [Fri, 28 Apr 2017 15:56:20 +0000 (09:56 -0600)] 
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

8 years agoMerge "chan_vpb.cc: Fix compile error."
Jenkins2 [Fri, 28 Apr 2017 15:38:22 +0000 (10:38 -0500)] 
Merge "chan_vpb.cc: Fix compile error."

8 years agoMerge "chan_sip: Trigger reinvite if the SDP answer is included in the SIP ACK"
George Joseph [Fri, 28 Apr 2017 00:17:09 +0000 (19:17 -0500)] 
Merge "chan_sip: Trigger reinvite if the SDP answer is included in the SIP ACK"

8 years agores_sdp_translator_pjmedia.c: Add TODO notes.
Richard Mudgett [Thu, 27 Apr 2017 21:46:40 +0000 (16:46 -0500)] 
res_sdp_translator_pjmedia.c: Add TODO notes.

Change-Id: If27ca61f79accc882c3376d2e876d2b44aa1347b

8 years agoSDP: Make SDP translation to/from internal representation more const.
Richard Mudgett [Mon, 24 Apr 2017 23:13:04 +0000 (18:13 -0500)] 
SDP: Make SDP translation to/from internal representation more const.

Change-Id: I473a174b869728604b37c60853896b0c458bc504

8 years agostream: Make ast_stream_topology_create_from_format_cap() allow NULL cap.
Richard Mudgett [Fri, 21 Apr 2017 00:25:10 +0000 (19:25 -0500)] 
stream: Make ast_stream_topology_create_from_format_cap() allow NULL cap.

Change-Id: Ie29760c49c25d7022ba2124698283181a0dd5d08

8 years agoSDP: Make ast_sdp_state_set_remote_sdp() return error.
Richard Mudgett [Mon, 24 Apr 2017 21:55:23 +0000 (16:55 -0500)] 
SDP: Make ast_sdp_state_set_remote_sdp() return error.

Change-Id: I7707c9d872c476d897ff459008652b35142a35e1

8 years agoSDP: Misc cleanups (Mostly memory leaks)
Richard Mudgett [Fri, 14 Apr 2017 16:52:33 +0000 (11:52 -0500)] 
SDP: Misc cleanups (Mostly memory leaks)

Change-Id: I74431b385da333f2c5f5a6d7c55e70b69a4f05d2

8 years agochan_vpb.cc: Fix compile error.
Richard Mudgett [Thu, 27 Apr 2017 23:15:48 +0000 (18:15 -0500)] 
chan_vpb.cc: Fix compile error.

Change-Id: I6d9edd34d8b2474222c86f44e379ead61e57a54f

8 years agoMerge "channel: Add ability to request an outgoing channel with stream topology."
Jenkins2 [Thu, 27 Apr 2017 22:53:53 +0000 (17:53 -0500)] 
Merge "channel: Add ability to request an outgoing channel with stream topology."

8 years agoMerge "frame: Better handle interpolated frames."
Jenkins2 [Thu, 27 Apr 2017 22:29:02 +0000 (17:29 -0500)] 
Merge "frame: Better handle interpolated frames."

8 years agoMerge "res_pjsip_session: Add cleanup to ast_sip_session_terminate"
Jenkins2 [Thu, 27 Apr 2017 22:14:48 +0000 (17:14 -0500)] 
Merge "res_pjsip_session:  Add cleanup to ast_sip_session_terminate"

8 years agoMerge "res_pjsip/res_pjsip_callerid: NULL check on caller id name string"
Jenkins2 [Thu, 27 Apr 2017 21:47:34 +0000 (16:47 -0500)] 
Merge "res_pjsip/res_pjsip_callerid: NULL check on caller id name string"

8 years agoMerge "vector: defaults and indexes"
Jenkins2 [Thu, 27 Apr 2017 20:44:45 +0000 (15:44 -0500)] 
Merge "vector: defaults and indexes"

8 years agoSDP API: Add SSRC-level attributes
Mark Michelson [Wed, 26 Apr 2017 21:14:00 +0000 (16:14 -0500)] 
SDP API: Add SSRC-level attributes

RFC 5576 defines how SSRC-level attributes may be added to SDP media
descriptions. In general, this is useful for grouping related SSRCes,
indicating SSRC-level format attributes, and resolving collisions in RTP
SSRC values. These attributes are used widely by browsers during WebRTC
communications, including attributes defined by documents outside of RFC
5576.

This commit introduces the addition of SSRC-level attributes into SDPs
generated by Asterisk. Since Asterisk does not tend to use multiple
SSRCs on a media stream, the initial support is minimal. Asterisk
includes an SSRC-level CNAME attribute if configured to do so. This at
least gives browsers (and possibly others) the ability to resolve SSRC
collisions at offer-answer time.

In order to facilitate this, the RTP engine API has been enhanced to be
able to retrieve the SSRC and CNAME on a given RTP instance.

res_rtp_asterisk currently does not provide meaningful CNAME values in
its RTCP SDES items, and therefore it currently will always return an
empty string as the CNAME value. A task in the near future will result
in res_rtp_asterisk generating more meaningful CNAMEs.

Change-Id: I29e7f23e7db77524f82a3b6e8531b1195ff57789

8 years agoMerge "cleanup: Fix fread() and fwrite() error handling"
Joshua Colp [Thu, 27 Apr 2017 18:59:02 +0000 (13:59 -0500)] 
Merge "cleanup: Fix fread() and fwrite() error handling"

8 years agoMerge "pjproject_bundled: Add --disable-libwebrtc to configure"
Jenkins2 [Thu, 27 Apr 2017 16:57:33 +0000 (11:57 -0500)] 
Merge "pjproject_bundled:  Add --disable-libwebrtc to configure"

8 years agores_pjsip_session: Add cleanup to ast_sip_session_terminate
George Joseph [Thu, 27 Apr 2017 13:02:12 +0000 (07:02 -0600)] 
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

8 years agoMerge "res_rtp_asterisk.c: Fix crash in RTCP DTLS operation."
Jenkins2 [Thu, 27 Apr 2017 15:05:16 +0000 (10:05 -0500)] 
Merge "res_rtp_asterisk.c: Fix crash in RTCP DTLS operation."

8 years agochannel: Add ability to request an outgoing channel with stream topology.
Joshua Colp [Mon, 24 Apr 2017 15:59:44 +0000 (15:59 +0000)] 
channel: Add ability to request an outgoing channel with stream topology.

This change extends the ast_request functionality by adding another
function and callback to create an outgoing channel with a requested
stream topology. Fallback is provided by either converting the
requested stream topology into a format capabilities structure if
the channel driver does not support streams or by converting the
requested format capabilities into a stream topology if the channel
driver does support streams.

The Dial application has also been updated to request an outgoing
channel with the stream topology of the calling channel.

ASTERISK-26959

Change-Id: Ifa9037a672ac21d42dd7125aa09816dc879a70e6

8 years agoMerge "sdp: Add support for T.38"
Joshua Colp [Thu, 27 Apr 2017 10:38:14 +0000 (05:38 -0500)] 
Merge "sdp: Add support for T.38"

8 years agoMerge "SDP: Ensure SDPs "merge" properly."
Joshua Colp [Thu, 27 Apr 2017 10:38:07 +0000 (05:38 -0500)] 
Merge "SDP: Ensure SDPs "merge" properly."

8 years agores_pjsip/res_pjsip_callerid: NULL check on caller id name string
Kevin Harwell [Wed, 26 Apr 2017 19:20:00 +0000 (14:20 -0500)] 
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

8 years agovector: defaults and indexes
Kevin Harwell [Tue, 25 Apr 2017 16:43:26 +0000 (11:43 -0500)] 
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

8 years agoframe: Better handle interpolated frames.
Joshua Colp [Wed, 26 Apr 2017 10:38:31 +0000 (10:38 +0000)] 
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

8 years agoMerge "res_pjsip_sdp_rtp: No rtpmap for static RTP payload IDs in SDP."
Jenkins2 [Wed, 26 Apr 2017 15:44:00 +0000 (10:44 -0500)] 
Merge "res_pjsip_sdp_rtp: No rtpmap for static RTP payload IDs in SDP."

8 years agores_pjsip_session : fixed wrong From Header number On Re-invite
Yasin CANER [Wed, 26 Apr 2017 14:22:41 +0000 (17:22 +0300)] 
res_pjsip_session : fixed wrong From Header number On Re-invite

ASTERISK-26964 #close

Change-Id: I55a9caa7dc90e6c4c219cb09b5c2ec08af84a302

8 years agopjproject_bundled: Add --disable-libwebrtc to configure
George Joseph [Wed, 26 Apr 2017 13:45:31 +0000 (07:45 -0600)] 
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

8 years agoMerge "alembic: Add table for 'resource_list' PJSIP RLS type."
George Joseph [Wed, 26 Apr 2017 14:02:17 +0000 (09:02 -0500)] 
Merge "alembic: Add table for 'resource_list' PJSIP RLS type."

8 years agochannels/chan_sip.c: use binding IP address for outgoing TCP SIP connections
Thierry Magnien [Wed, 26 Apr 2017 12:58:44 +0000 (14:58 +0200)] 
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

8 years agoMerge "res_pjsip_session.c: Send 100 Trying out earlier to prevent retransmissions."
Jenkins2 [Tue, 25 Apr 2017 22:04:47 +0000 (17:04 -0500)] 
Merge "res_pjsip_session.c: Send 100 Trying out earlier to prevent retransmissions."

8 years agoMerge "res_hep: Add additional config initialization and validation"
George Joseph [Tue, 25 Apr 2017 21:39:03 +0000 (16:39 -0500)] 
Merge "res_hep: Add additional config initialization and validation"

8 years agocleanup: Fix fread() and fwrite() error handling
Sean Bright [Fri, 21 Apr 2017 17:04:44 +0000 (13:04 -0400)] 
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

8 years agoMerge "res_pjsip_session.c: Restructure ast_sip_session_alloc()"
George Joseph [Tue, 25 Apr 2017 20:37:15 +0000 (15:37 -0500)] 
Merge "res_pjsip_session.c: Restructure ast_sip_session_alloc()"

8 years agoalembic: Add table for 'resource_list' PJSIP RLS type.
Joshua Colp [Tue, 25 Apr 2017 12:52:48 +0000 (12:52 +0000)] 
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

8 years agosdp: Add support for T.38
Joshua Colp [Fri, 14 Apr 2017 10:21:13 +0000 (10:21 +0000)] 
sdp: Add support for T.38

This change adds a T.38 format which can be used in a stream
topology to specify that a UDPTL stream needs to be created.
The SDP API has been changed to understand T.38 and create
the UDPTL session, add the attributes, and parse the attributes.

This change does not change the boundary of the T.38 state
machine. It is still up to the channel driver to implement and
act on it (such as queueing control frames or reacting to them).

ASTERISK-26949

Change-Id: If28956762ccb8ead562ac6c03d162d3d6014f2c7