Fix Queue Log Reporting Every Call COMPLETECALLER With "h" Extension Present
When the "h" extension is present within the context of the queue, all calls
are being reported COMPLETECALLER even when the agent is hanging up the call.
This patch checks to see if the agent hung-up or not instead of only relying on
checking if the queue (caller) channel hung-up or not. It would appear that
having the h extension in the mix, the pbx goes to the h extension,
"hanging-up" the queue channel and triggering the reporting of COMPLETECALLER.
(closes issue ASTERISK-20743)
Reported by: call
Tested by: call, Michael L. Young
Patches:
asterisk-20743-q-cmplt-caller.diff
uploaded by Michael L. Young (license 5026)
Richard Mudgett [Thu, 3 Jan 2013 19:42:54 +0000 (19:42 +0000)]
chan_agent: Fix wrapup time wait response.
* Made agent_cont_sleep() and agent_ack_sleep() stop waiting if the wrapup
time expires. agent_cont_sleep() had tried but returned the wrong value
to stop waiting.
* Made agent_ack_sleep() take a struct agent_pvt pointer instead of a void
pointer for better type safety.
........
Merged revisions 378486 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 378487 from http://svn.asterisk.org/svn/asterisk/branches/11
Kinsey Moore [Thu, 3 Jan 2013 18:51:43 +0000 (18:51 +0000)]
Add missing test event
This test event was missing from channel.c causing the dial_LS_options
test to fail intermittently because of a race condition where most code
paths emitted the test event but this one did not. The dial_LS_options
test should stop bouncing now.
........
Merged revisions 378455 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 378459 from http://svn.asterisk.org/svn/asterisk/branches/11
Tilghman Lesher [Thu, 3 Jan 2013 16:04:11 +0000 (16:04 +0000)]
Add aliases to the Directory.
This is an interesting feature that allows additional strings to be used to
search the Directory, primarily intended to be used with nicknames, but could
be used with affiliations and the like. Because the name field is used in
more than one place (such as email notifications), it is important that these
additional strings not be placed in the name field, but be specified
separately.
Matthew Jordan [Thu, 3 Jan 2013 15:37:31 +0000 (15:37 +0000)]
Prevent crashes in res_xmpp when receiving large messages
Similar to r378287, res_xmpp was marshaling data read from an external source
onto the stack. For a sufficiently large message, this could cause a stack
overflow. This patch modifies res_xmpp in a similar fashion to res_jabber by
removing the stack allocation, as it was unnecessary.
Matthew Jordan [Wed, 2 Jan 2013 22:19:32 +0000 (22:19 +0000)]
Clean up app_mysql's application entry points to properly parse arguments
When parsing arguments, application entry points should not attempt to
directly modify the parameters to the function. This patch properly duplicates
the passed in parameters before attempting to parse them.
Matthew Jordan [Wed, 2 Jan 2013 22:10:32 +0000 (22:10 +0000)]
Prevent crashes from occurring when reading from data sources with large values
When reading configuration data from an Asterisk .conf file or when pulling
data from an Asterisk RealTime backend, Asterisk was copying the data on the
stack for manipulation. Unfortunately, it is possible to read configuration
data or realtime data from some data source that provides a large blob of
characters. This could potentially cause a crash via a stack overflow.
This patch prevents large sets of data from being read from an ARA backend or
from an Asterisk conf file.
Richard Mudgett [Wed, 2 Jan 2013 21:23:16 +0000 (21:23 +0000)]
Fix AMI redirect action with two channels failing to redirect both channels.
The AMI redirect action can fail to redirect two channels that are bridged
together. There is a race between the AMI thread redirecting the two
channels and the bridge thread noticing that a channel is hungup from the
redirects.
* Made the bridge wait for both channels to be redirected before exiting.
* Made the AMI redirect check that all required headers are present before
proceeding with the redirection.
* Made the AMI redirect require that any supplied ExtraChannel exist
before proceeding. Previously the code fell back to a single channel
redirect operation.
(closes issue ASTERISK-18975)
Reported by: Ben Klang
Matthew Jordan [Wed, 2 Jan 2013 18:11:59 +0000 (18:11 +0000)]
Prevent exhaustion of system resources through exploitation of event cache
Asterisk maintains an internal cache for devices in the event subsystem. The
device state cache holds the state of each device known to Asterisk, such that
consumers of device state information can query for the last known state for
a particular device, even if it is not part of an active call. The concept of
a device in Asterisk can include entities that do not have a physical
representation. One way that this occurred was when anonymous calls are allowed
in Asterisk. A device was automatically created and stored in the cache for
each anonymous call that occurred; this was possible in the SIP and IAX2
channel drivers and through channel drivers that utilized the
res_jabber/res_xmpp resource modules (Gtalk, Jingle, and Motif). These devices
are never removed from the system, allowing anonymous calls to potentially
exhaust a system's resources.
This patch changes the event cache subsystem and device state management to
no longer cache devices that are not associated with a physical entity.
Matthew Jordan [Wed, 2 Jan 2013 15:39:42 +0000 (15:39 +0000)]
Resolve crashes due to large stack allocations when using TCP
Asterisk had several places where messages received over various network
transports may be copied in a single stack allocation. In the case of TCP,
since multiple packets in a stream may be concatenated together, this can
lead to large allocations that overflow the stack.
This patch modifies those portions of Asterisk using TCP to either
favor heap allocations or use an upper bound to ensure that the stack will not
overflow:
* For SIP, the allocation now has an upper limit
* For HTTP, the allocation is now a heap allocation instead of a stack
allocation
* For XMPP (in res_jabber), the allocation has been eliminated since it was
unnecesary.
Note that the HTTP portion of this issue was independently found by Brandon
Edwards of Exodus Intelligence.
Kinsey Moore [Mon, 31 Dec 2012 14:46:06 +0000 (14:46 +0000)]
Ensure chan_sip rejects encrypted streams without crypto info
This ensures that Asterisk rejects encrypted media streams (RTP/SAVP
audio and video) that are missing cryptographic keys and ensures that
the incoming SDP is consistent with RFC4568 as far as having a crypto
attribute present for any SAVP streams.
Jason Parker [Mon, 17 Dec 2012 20:59:51 +0000 (20:59 +0000)]
Make libasteriskssl.so symlink use a relative path.
This was causing issues when using DESTDIR, since the path to which the link
pointed is not likely to exist (and not useful to exist) on the target system.
(issue ASTNOW-284)
........
Merged revisions 378073 from http://svn.asterisk.org/svn/asterisk/branches/11
Jonathan Rose [Fri, 14 Dec 2012 22:34:18 +0000 (22:34 +0000)]
Features: BRIDGE_FEATURES variable automixmonitor support and use proper party
BRIDGE_FEATURES did not previously support the automixmonitor feature. Now it
does. In addition, the BRIDGE_FEATURES variable would not apply features to
the proper party based on whether the feature option letter was in caps or
in lowercase (both ways would apply it to the caller). Now uppercase applies
to the caller while lowercase applies to the callee (like with the dial option)
Richard Mudgett [Fri, 14 Dec 2012 21:35:44 +0000 (21:35 +0000)]
app_queue: Revert bad ringinuse=no patch.
With the option ringinuse=no set, the patch committed for ASTERISK-16115
causes non-SIP queue members to never be called because the device state
is checked after a channel is created to determine if the member is busy.
These queue members always get the "Member %s is busy, cannot dial"
message.
Most channel drivers other than chan_sip use the default device state
handling. The default device-state state is considered in use or unknown
if the channel exists or not respectively.
Damien Wedhorn [Fri, 14 Dec 2012 01:55:43 +0000 (01:55 +0000)]
Fix skinny to recognise vmexten in general section of conf
Fixup the vmexten so if globally set in general section will be honored by
chan_skinny. Also get rid of the 'global_' part of variable name to match
regexten.
Richard Mudgett [Thu, 13 Dec 2012 21:28:15 +0000 (21:28 +0000)]
confbridge: Fix MOH on simultaneous user entry to a new conference.
When two users entered a new conference simultaneously, one of the callers
hears MOH. This happened if two unmarked users entered simultaneously and
also if a waitmarked and a marked user entered simultaneously.
* Created a confbridge internal MOH API to eliminate the inlined MOH
handling code. Note that the conference mixing bridge needs to be locked
when actually starting/stopping MOH because there is a small window
between the conference join unsuspend MOH and actually joining the mixing
bridge.
* Created the concept of suspended MOH so it can be interrupted while
conference join announcements to the user and DTMF features can operate.
* Suspend any MOH until the user is about to actually join the mixing
bridge of the conference. This way any pre-join file playback does not
need to worry about MOH.
* Made post-join actions only play deferred entry announcement files.
Changing the user/conference state during that time is not protected or
controlled by the state machine.
Damien Wedhorn [Thu, 13 Dec 2012 21:25:31 +0000 (21:25 +0000)]
Minor fixes for chan_skinny
Whitespace, change SUBSTATE_ONHOOK to correct SKINNY_ONHOOK and
correct len of 2 strcmp in skinny_setdebug(). (see opticron's review
on https://reviewboard.asterisk.org/r/2240/)
........
Merged revisions 377991 from http://svn.asterisk.org/svn/asterisk/branches/11
Sean Bright [Thu, 13 Dec 2012 21:20:32 +0000 (21:20 +0000)]
Make generate_exchange_uuid() always return the passed ast_str pointer.
I changed this code earlier to return NULL if it wasn't able to generate a UUID,
whereas the earlier code would always return the ast_str that was passed in.
Switch back to returning the ast_str, only set it to the empty string instead if
UUID generation fails. We still do a validity check later which will catch this
and blow up if necessary.
Sean Bright [Thu, 13 Dec 2012 15:37:55 +0000 (15:37 +0000)]
Use the UUID API to generate and validate UUIDs for res_calendar_exchange.
Currently the res_calendar_exchange module uses its own method of generating
UUIDs using ast_random(). Now that we have a UUID API we should use that
instead.
Brent Eagles [Thu, 13 Dec 2012 15:22:27 +0000 (15:22 +0000)]
This change adds a SIP peer configuration feature to allow the peer's
configured codecs to take precedence on an outgoing call.
This change introduces a new peer configuration property named
'ignore_requested_pref' that causes the requested codec to be ignored when
determining the preferred codec for an outgoing call leg. The consequence is
that Asterisk's usual efforts to prefer avoiding transcoding can be overridden
on a peer-by-peer basis where appropriate.
Kinsey Moore [Thu, 13 Dec 2012 14:28:57 +0000 (14:28 +0000)]
Ensure Min-SE is included in outbound INVITEs
Asterisk now includes Min-SE in outbound INVITEs when the value is not
90 (the default) and session timers are not disabled. This has the
effect of Asterisk following RFC4028 more closely with regard to 422
responses and preventing situations in which Asterisk would be forced
to temporarily accept a call to tear it down based on a Session-Expires
below the locally configured Min-SE.
(issue SWP-5051)
Review: https://reviewboard.asterisk.org/r/2222/ Reported-by: Kinsey Moore Patch-by: Kinsey Moore
........
Merged revisions 377946 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 377947 from http://svn.asterisk.org/svn/asterisk/branches/10
........
Merged revisions 377948 from http://svn.asterisk.org/svn/asterisk/branches/11
Michael L. Young [Wed, 12 Dec 2012 04:43:18 +0000 (04:43 +0000)]
Convert Dynamic Features Buffer To Use ast_str
Currently, the buffer for the dynamic features list is set to a fixed size of
128. If the list is bigger than that, it results in the dynamic feature(s) not
being recognized.
This patch changes the buffer from a fixed size to a dynamic one.
(closes issue ASTERISK-20680)
Reported by: Clod Patry
Tested by: Michael L. Young
Patches:
asterisk-20680-dynamic-features-v2.diff
uploaded by Michael L. Young (license 5026)
Mark Michelson [Wed, 12 Dec 2012 00:02:31 +0000 (00:02 +0000)]
Fix a potential deadlock in chan_sip during transfers.
The issue comes from the fact that transfers may perform
a redirecting update on a channel. The issue is that lock
inversion between the channel and its tech_pvt occurs since
the channel lock is released during the transfer process.
The fix is to move when the redirecting update occurs to a
place where neither the tech_pvt or the channel is locked so
that the two can be locked in the proper order.
(closes issue ASTERISK-20708)
reported by Mark Michelson
patches:
ASTERISK-20708-3.patch uploaded by Mark Michelson (License #5049)
Tested by:
Tim Ringenbach at Asteria Solutions Group
........
Merged revisions 377910 from http://svn.asterisk.org/svn/asterisk/branches/11
Mark Michelson [Tue, 11 Dec 2012 20:53:34 +0000 (20:53 +0000)]
Fix crash that can occur if CLI registration fails for an aliased command.
A recent memory leak fix in main/cli.c causes an ast_cli_entry's command
field to be freed and NULLed if ast_cli_register() fails. res_clialiases
was ignoring the return value of ast_cli_register() and was then passing
the NULL command off to a a hash function. This resulted in a crash.
The fix is not to ignore the erroneous return value. If ast_cli_register()
fails, then we do not continue trying to process the current alias.
........
Merged revisions 377840 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 377842 from http://svn.asterisk.org/svn/asterisk/branches/10
........
Merged revisions 377843 from http://svn.asterisk.org/svn/asterisk/branches/11
Richard Mudgett [Tue, 11 Dec 2012 02:13:37 +0000 (02:13 +0000)]
Cleanup indications on exit.
* Made ast_unregister_indication_country() unlink the found tone zone
before selecting a new default_tone_zone to make it impossible to select
the tone zone being unregistered again.
* Ringcadence is no longer parsed twice in store_config_tone_zone().
* Cleanup CLI commands and destroy default_tone_zone on exit.
Kinsey Moore [Mon, 10 Dec 2012 16:56:37 +0000 (16:56 +0000)]
Ensure ReceiveFax provides a CED tone via T.38
When using res_fax_digium, the T.38 CED tone was not being provided
properly which would cause some incoming faxes to fail. This was not an
issue with res_fax_spandsp since it does not strictly honor the
send_ced flag and sends the CED tone whenever receiving a T.38 fax.
(closes issue FAX-343) Reported-by: Benjamin Tietz Patch-by: Kinsey Moore
........
Merged revisions 377655 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 377656 from http://svn.asterisk.org/svn/asterisk/branches/10
........
Merged revisions 377657 from http://svn.asterisk.org/svn/asterisk/branches/11
Kinsey Moore [Mon, 10 Dec 2012 14:45:52 +0000 (14:45 +0000)]
Handle Session-Expires less than local Min-SE in 200 OK
Ensure that a call is immediately torn down if a Session-Expires value
received in a 200 OK is less than the local Min-SE. This also prevents
Asterisk from allowing calls with Session-Expires below the
RFC4028-mandated minimum (90s).
(closes issue ASTERISK-20653)
Review: https://reviewboard.asterisk.org/r/2237/ Patch-by: Kinsey Moore
........
Merged revisions 377623 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 377624 from http://svn.asterisk.org/svn/asterisk/branches/10
........
Merged revisions 377625 from http://svn.asterisk.org/svn/asterisk/branches/11
Fix code to send in both rx and tx open stream messages correct codecs. Found that on phase 0/1 phones wrong codecs cause to no audio in some situations.
(issue ASTERISK-20183)
........
Merged revisions 377591 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 377592 from http://svn.asterisk.org/svn/asterisk/branches/10
........
Merged revisions 377593 from http://svn.asterisk.org/svn/asterisk/branches/11
Tilghman Lesher [Mon, 10 Dec 2012 01:41:50 +0000 (01:41 +0000)]
Improve documentation by making all of the colors used readable,
no matter what the background color is.
Dark blue on a black background is unreadable, as is yellow on a
light background. This patch turns on the bright attribute for
colors when on a dark background and turns *off* the bright
attribute when the -W command line option is used (indicating a
_light_ background). This ensures that text is readable in both
cases.
Richard Mudgett [Sat, 8 Dec 2012 00:30:40 +0000 (00:30 +0000)]
Fix order of SIP allow/disallow in MySQL contrib script.
Using the contrib sippeers.sql script to create the sippeers MySQL table
would result in being unable to place calls if you set the disallow value
to all.
(closes issue ASTERISK-20756)
Reported by: Andre Luis
Patches:
sippeers.patch patch uploaded by Andre Luis
........
Merged revisions 377431 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 377432 from http://svn.asterisk.org/svn/asterisk/branches/10
........
Merged revisions 377433 from http://svn.asterisk.org/svn/asterisk/branches/11
Kinsey Moore [Fri, 7 Dec 2012 22:08:48 +0000 (22:08 +0000)]
codec_dahdi: Fix output of "transcoder show" CLI command.
In r306010 "Asterisk media architecture conversion - no more format
bitfields", the logic for incrementing encoders and decoders when
opening transcoder channels was changed without making the corresponding
change when decrementing encoder / decoder channels. The result being
that when a channel was destroyed, codec_dahdi couldn't properly tell if
it was an encoder or decoder, and the default case is to assume it was a
decoder.
This could result in negative numbers for decoders in use like in:
VOIP6*CLI> transcoder show
2/-2 encoders/decoders of 92 channels are in use.
Russell Bryant [Thu, 6 Dec 2012 15:13:37 +0000 (15:13 +0000)]
Minor code cleanup in named_acl.c.
This patch makes a few little cleanups to named_acl.c. A couple non-public
functions were made static and an opening brace for a function was moved to
its own line, per the coding guidelines.
Matthew Jordan [Thu, 6 Dec 2012 14:26:13 +0000 (14:26 +0000)]
Fix memory leak in 'manager show event' when command entered incorrectly
When the CLI command 'manager show event' was run incorrectly and its usage
instructions returned, a reference to the event container was leaked. This
would prevent the container from being reclaimed when Asterisk exits. We now
properly decrement the count on the ao2 object using the nifty RAII_VAR macro.
Thanks to Russell for helping me stumble on this, and Terry for writing that
ridiculously helpful macro.
........
Merged revisions 377319 from http://svn.asterisk.org/svn/asterisk/branches/11
Jonathan Rose [Wed, 5 Dec 2012 17:17:06 +0000 (17:17 +0000)]
res_srtp: Fix a crash caused by srtp_dealloc on an already dealloced session
When srtp_create fails, the session may be dealloced or just not alloced. At
the same time though, the session pointer might not be set to NULL in this
process and attempting to srtp_dealloc it again will cause a segfault. This
patch checks for failure of srtp_create and sets the session pointer to NULL
if it fails.
Joshua Colp [Wed, 5 Dec 2012 16:51:58 +0000 (16:51 +0000)]
Fix a SIP request memory leak with TLS connections.
During the TLS re-work in chan_sip some TLS specific code was moved
into a separate function. This function operates on a copy of the
incoming SIP request. This copy was never deinitialized causing a
memory leak for each request processed.
This function is now given a SIP request structure which it can use
to copy the incoming request into. This reduces the amount of memory
allocations done since the internal allocated components are reused
between packets and also ensures the SIP request structure is
deinitialized when the TLS connection is torn down.
(closes issue ASTERISK-20763)
Reported by: deti
........
Merged revisions 377257 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 377258 from http://svn.asterisk.org/svn/asterisk/branches/10
........
Merged revisions 377259 from http://svn.asterisk.org/svn/asterisk/branches/11
Richard Mudgett [Wed, 5 Dec 2012 01:11:26 +0000 (01:11 +0000)]
confbridge: Fix several small issues.
* Made func_confbridge_helper() allow an empty value when setting options.
You previously could not Set(CONFBRIDGE(user,pin)=) and clear the
configured pin from the dialplan.
* Made func_confbridge_helper() handle its datastore better if multiple
threads attempt to set the first CONFBRIDGE option value on the channel.
* Made the func_confbridge_helper() only output one diagnostic message
concerning the option.
* Made the bridge video_mode able to repeatedly change in the config file
and CONFBRIDGE dialplan function. The video_mode option values are an
enum and not independent of each other.
* Made handle_cli_confbridge_show_bridge_profile() better handle the
video_mode option.
* Simplified datastore handling code in conf_find_user_profile() and
conf_find_bridge_profile().
Richard Mudgett [Mon, 3 Dec 2012 23:00:08 +0000 (23:00 +0000)]
Cleanup ast_run_atexits() atexits list.
* Convert atexits list to a mutex instead of a rd/wr lock. The lock is
only write locked.
* Move CLI verbose Asterisk ending message to where AMI message is output
in really_quit() to avoid further surprises about using stuff already
shutdown.
Joshua Colp [Mon, 3 Dec 2012 14:56:36 +0000 (14:56 +0000)]
Fix an RTP instance reference count leak in chan_motif.
When setting up an RTP instance the RTCP portion of the instance
keeps a reference to the instance itself. In order to release this
reference and stop RTCP the stop API call must be called before
destroying the instance.
Olle Johansson [Mon, 3 Dec 2012 14:46:02 +0000 (14:46 +0000)]
Move functions to AFTER the block of forward declarations of functions.
It was a mess. The first part of chan_sip.c is constants, declarations, structures and stuff,
then forward declarations and then actual code. It's still a mess, but a bit less messy ;-)
Joshua Colp [Sat, 1 Dec 2012 00:47:42 +0000 (00:47 +0000)]
Tweak extension used for incoming calls received on Motif.
Based on feedback from numerous individuals this patch tweaks incoming calls
to first look for an extension with the name of the endpoint. If no such extension
exists the call will silently fall back to the "s" extension as it previously
did.
........
Merged revisions 376983 from http://svn.asterisk.org/svn/asterisk/branches/11
Mark Michelson [Fri, 30 Nov 2012 16:56:53 +0000 (16:56 +0000)]
Fix potential crashes during SIP attended transfers.
The principal behind this patch is simple. During a transfer,
we manipulate channels that are owned by a separate thread than
the one we currently are running in, so it makes sense that we
need to grab a reference to the channels so that they cannot
disappear out from under us.
In the wild, crashes were sometimes seen when the transferring
party would hang up the call before the transfer target answered
the call. The most common place to see the crash occur was when
attempting to send a connected line update to the transferer
channel.
(closes issue ASTERISK-20226)
Reported by Jared Smith
Patches:
ASTERISK-20226.patch uploaded by Mark Michelson (License #5049)
Tested by: Jared Smith
........
Merged revisions 376901 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 376916 from http://svn.asterisk.org/svn/asterisk/branches/10
........
Merged revisions 376917 from http://svn.asterisk.org/svn/asterisk/branches/11
Michael L. Young [Thu, 29 Nov 2012 21:58:41 +0000 (21:58 +0000)]
Improve Code Readability And Fix Setting natdetected Flag
For 1.8, 10, 11 and trunk we are are improving the code readability.
For 11 and trunk, auto nat detection was added. The natdetected flag was being
set to 1 when the host address in the VIA header did not specifiy a port. This
patch fixes this by setting the port on the temporary sock address used to
SIP_STANDARD_PORT in order for the sock address comparison to work properly.
(closes issue ASTERISK-20724)
Reported by: Michael L. Young
Patches:
asterisk-20724-set-port-v2.diff uploaded by Michael L. Young (license 5026)