build_peer doesnt unlink a peer object from peers_by_ip container which leads to a wrong refcounter value.
adding an ao2_unlink from the peers_by_ip container fix it.
Updated SIP 484 handling; added Incomplete control frame
When a SIP phone uses the dial application and receives a 484 Address
Incomplete response, if overlapped dialing is enabled for SIP, then
the 484 Address Incomplete is forwarded back to the SIP phone and the
HANGUPCAUSE channel variable is set to 28. Previously, the Incomplete
application dialplan logic was automatically triggered; now, explicit
dialplan usage of the application is required.
Additionally, this patch adds a new AST_CONTOL_FRAME type called
AST_CONTROL_INCOMPLETE. If a channel driver receives this control frame,
it is an indication that the dialplan expects more digits back from the
device. If the device supports overlap dialing it should attempt to
notify the device that the dialplan is waiting for more digits; otherwise,
it can handle the frame in a manner appropriate to the channel driver.
(closes issue ASTERISK-17288)
Reported by: Mikael Carlsson
Tested by: Matthew Jordan
Fix crash with res_fax when MALLOC_DEBUG and "core stop gracefully" are used.
Asterisk crashes if MALLOC_DEBUG is enabled when res_fax tries to
unregister its logger level.
* Make ast_logger_unregister_level() use ast_free() instead of free().
When MALLOC_DEBUG is enabled, ast_free() does not degenerate into a call
to free(). Therefore, if you allocated memory with a form of ast_malloc
you must free it with ast_free.
........
* Made AMI action Park not say anything to the parker channel (AMI header
Channel2) since the AMI action is a third party parking the call. (This
is a change in behavior that cannot be preserved without a lot of effort.)
* Made not play pbx-parkingfailed if the Park 's' option is used.
Adding the Feature to sent a Reason Header in a SIP Cancel message by set the flag AST_FLAG_ANSWERED_ELSEWHERE before doing a masquerade in the pickup function.
........
Stefan Schmidt [Wed, 7 Sep 2011 13:26:50 +0000 (13:26 +0000)]
Adding the Feature to sent a Reason Header in a SIP Cancel message by set the flag AST_FLAG_ANSWERED_ELSEWHERE before doing a masquerade in the pickup function.
MusicOnHold has extra unref which may lead to memory corruption and crash.
The problem happens when a call is disconnected and you had started a MOH
class that does not use the files mode. If you define REF_DEBUG and
recreate the problem, it will announce itself with the following warning:
Attempt to unref mohclass 0xb70722e0 (default) when only 1 ref remained,
and class is still in a container!
* Fixed moh_alloc() and moh_release() functions not handling the
state->class reference consistently.
(closes issue ASTERISK-18346)
Reported by: Mark Murawski
Patches:
jira_asterisk_18346_v1.8.patch (license #5621) patch uploaded by rmudgett
Tested by: rmudgett, Mark Murawski
Fix potential memory allocation failure crashes in config.c.
* Added required checks to the returned memory allocation pointers to
prevent crashes.
* Made ast_include_rename() create a replacement ast_variable list node if
the new filename is longer than the available space. Fixes potential
crash and memory leak.
* Factored out ast_variable_move() from ast_variable_update() so
ast_include_rename() can also use it when creating a replacement
ast_variable list node.
* Made the filename stuffed at the end of the struct a minimum allocated
size in ast_variable_new() in case ast_include_rename() changes the stored
filename.
* Constify struct char pointers pointing to strings stuffed at the end of
the struct for: ast_variable, cache_file_mtime, and ast_config_map.
* Factored out cfmtime_new() to remove inlined code and allow some struct
pointers to become const.
* Removed the list lock from struct cache_file_mtime that was never used.
* Added doxygen comments to several structure elements and better
documented what strings are stuffed at the struct end char array.
* Reworked ast_config_text_file_save() and set_fn() to handle allocation
failure of the include file scratch pad object tracking blank lines.
* Made ast_config_text_file_save() fn[] declared with PATH_MAX to ensure
it is long enough for any filename with path. Also reduced the number of
container fileset buckets from a rediculus 180,000 to 1023.
As a function pointer, the reference has to be resolved at load time
irrespective of the RTLD_LAZY flag. Creating a local alias solves
this problem, because the structure is initialized with that local
function pointer, while the actual function can remain lazily linked
until runtime.
The reason why this is important is because we lazily load function
references during the module loading process, in order to obtain
priority values for each module, ensuring that modules are loaded in
the correct order. Previous to this change, when this module was
initially loaded, the module loader would emit a symbol resolution
error, because of the above requirement.
Closes ASTERISK-18399 (reported by Mikael Carlsson, fix suggested by
Walter Doekes, patch by me)
........
No DAHDI channel available for conference, user introduction disabled.
The following error will consistently occur when trying to dial into a
MeetMe conference when the server does not have DAHDI hardware installed:
app_meetme.c: No DAHDI channel available for conference, user introduction
disabled (is chan_dahdi loaded?)
While chan_dahdi is loaded correctly during compilation and install of
Asterisk/Dahdi, including associated modules, etc., a chan_dahdi.conf
configuration file in /etc/asterisk is not created by FreePBX if hardware
does not exist, causing MeetMe to be unable to open a DAHDI pseudo
channel.
* Allow chan_dahdi to create a pseudo channel when there is no
chan_dahdi.conf file to load.
Call pickup race leaves orphaned channels or crashes.
Multiple users attempting to pickup a call that has been forked to
multiple extensions either crashes or fails a masquerade with a "bad
things may happen" message.
This is the scenario that is causing all the grief:
1) Pickup target is selected
2) target is marked as being picked up in ast_do_pickup()
3) target is unlocked by ast_do_pickup()
4) app dial or queue gets a chance to hang up losing calls and calls
ast_hangup() on target
5) SINCE A MASQUERADE HAS NOT BEEN SETUP YET BY ast_do_pickup() with
ast_channel_masquerade(), ast_hangup() completes successfully and the
channel is no longer in the channels container.
6) ast_do_pickup() then calls ast_channel_masquerade() to schedule the
masquerade on the dead channel.
7) ast_do_pickup() then calls ast_do_masquerade() on the dead channel
8) bad things happen while doing the masquerade and in the process
ast_do_masquerade() puts the dead channel back into the channels container
9) The "orphaned" channel is visible in the channels list if a crash does
not happen.
This patch does the following:
* Made ast_hangup() set AST_FLAG_ZOMBIE on a successfully hung-up channel
and not release the channel lock until that has happened.
* Made __ast_channel_masquerade() not setup a masquerade if either channel
has AST_FLAG_ZOMBIE set.
* Fix chan_agent misuse of AST_FLAG_ZOMBIE since it would no longer work.
Refresh peer address if DNS unavailable at peer creation
If Asterisk starts and no DNS is available, outbound registrations will fail
indefinitely. This patch copies the address from the sip_registry struct, which
will be updated, to the peer->addr when necessary.
If dnsmgr is enabled, the registration fails without the patch because even
though the address on the registry is updated via dnsmgr, the address is just
copied on the first try. Since we use ast_sockaddr_copy, dnsmgr can't update
the address that is copied to the sip_pvt or peers.
[patch] Buddies are always auto-registered when processing the roster
Reporter said autoregister flag was ignored for registering 'buddies' which
had a subscription to us. Verified that this was the case and observed how
the patch addressed this and made sure it didn't break anything.
(closes issue ASTERISK-14233)
Reported by: Simon Arlott
Patches:
asterisk-0015229.patch (license #5756) patch uploaded by Simon Arlott
Tested by: Jonathan Rose
........
Bug fixes for voicemail user emailsubject / emailbody.
This code change fixes a few issues with the voicemail user override of
emailbody and emailsubject, including escaping the strings, potential memory
leaks, and not overriding the voicemail defaults. Revision 325877 fixed this
for ASTERISK-16795, but did not fix it for ASTERISK-16781. A subsequent
check-in prevented 325877 from being applied to 10. This check-in resolves
both issues, and applies the changes to 1.8, 10, and trunk.
Segfault when publishing device states via XMPP and not connected
When using publishing device state with res_jabber, Asterisk will attempt
to send a device state using the unconnected client using iks_send_raw
and crash. This patch checks the validity of the connection before
attempting to send the device state.
(closes issue ASTERISK-18078)
Reported by: Michael L. Young
Patches:
res_jabber-segfault-pubsub-not-connected2.patch (license #5026) patch uploaded by Michael L. Young
Tested by: Jonathan Rose
........
The patch that was committed in the 1.6.x versions of Asterisk for
ASTERISK-15862 actually fixed two issues. One was not applicable to 1.8
but the other is. queue_leak.patch fixes the portion applicable to 1.8.
(closes issue ASTERISK-18265)
Reported by: Fred Schroeder
Patches:
queue_leak.patch (license #5049) patch uploaded by mmichelson
Tested by: Thomas Arimont
........
* Fixed load_realtime_queue() leaking a queue reference when it overwrites
q when processing a realtime queue.
(issue ASTERISK-18265)
* Make join_queue() unreference the queue returned by
load_realtime_queue() when it is done with the pointer. The
load_realtime_queue() returns a reference to the just loaded realtime
queue.
* Fixed queues container reference leak in queues_data_provider_get().
* queue_unref() should not return q that was just unreferenced.
* Made logic in __queues_show() and queues_data_provider_get() when
calling load_realtime_queue() easier to understand.
........
This update adds a new AMI event, TestEvent, which is enabled when the TEST_FRAMEWORK compiler flag is defined. It also adds initial usage of this event to app_voicemail. The TestEvent AMI event is used extensively by the voicemail tests in the Asterisk Test Suite.
........
Calling ast_load_realtime() can leak the last list node if the read list
only contains empty variable value items.
* Fixed list filter loop in ast_load_realtime() to delete the list node
immediately instead of the next time through the loop. The next time
through the loop may not happen if the node to delete is the last in the
list.
Kinsey Moore [Fri, 19 Aug 2011 19:59:34 +0000 (19:59 +0000)]
Make CONFBRIDGE_INFO behave more nicely
CONFBRIDGE_INFO doesn't behave as well in edge cases as MEETME_INFO. With this
patch, CONFBRIDGE_INFO should behave in a much more reasonable manner when
presented with invalid conferences and keywords.
CRC4 in "dahdi show status" gives wrong impression to T1 users
Change CRC4 to CRC in the output of "dahdi show status" so that it can apply in
more situations without confusing users, especially since T1 lines use CRC6
instead of CRC4.
Re-add support for spaces in pathnames, including now spaces in DESTDIR.
This was initially added to 1.8 prior to release, primarily to support the
standard paths on Mac OS X, but was partially reverted recently in Subversion,
due to the lack of support for spaces in DESTDIR. This commit restores support
for the standard paths on Mac OS X, and also includes support for spaces in
DESTDIR.
Numerous isues have been reported for deadlocks that are caused by
a blocking read in res_timing_timerfd on a file descriptor that will
never be written to. This patch adds some checks to make sure that
the timerfd is both valid and armed before calling read().
Should fix: ASTERISK-18142, ASTERISK-18166, ASTERISK-18197, AST-486,
AST-495, AST-507 and possibly others.
Outgoing BRI calls fail when using Asterisk 1.8 with HA8, HB8, and B410P cards.
France Telecom brings layer 2 and layer 1 down on BRI lines when the line
is idle. When layer 1 goes down Asterisk cannot make outgoing calls and
the HA8 and HB8 cards also get IRQ misses.
The inability to make outgoing calls is because the line is in red alarm
and Asterisk will not make calls over a line it considers unavailable.
The IRQ misses for the HA8 and HB8 card are because the hardware is
switching clock sources from the line which just brought layer 1 down to
internal timing.
There is a DAHDI option for the B410P card to not tell Asterisk that layer
1 went down so Asterisk will allow outgoing calls: "modprobe wcb4xxp
teignored=1". There is a similar DAHDI option for the HA8 and HB8 cards:
"modprobe wctdm24xxp bri_teignored=1". Unfortunately that will not clear
up the IRQ misses when the telco brings layer 1 down.
* Add layer 2 persistence option to customize the layer 2 behavior on BRI
PTMP lines. The new option has three settings: 1) Use libpri default
layer 2 setting. 2) Keep layer 2 up. Bring layer 2 back up when the peer
brings it down. 3) Leave layer 2 down when the peer brings it down.
Layer 2 will be brought up as needed for outgoing calls.
ASTERISK-18067 ASTERISK-15479 - White Space affects mailbox value, multiple MWI subs
Before, having multiple subscriptions to mailboxes on a sip peer set via the mailbox
setting in sip.conf would only result in updates being sent on whichever mailbox
triggered the mwi event. Now all of them get counted regardless. Also fixes a bug
involving parsing of the mailbox option in sip.conf so that trailing and leading
spaces before/after commas are trimmed.
(closes issue ASTERISK-18067)
Reported by: aragon
(closes issue ASTERISK-15479)
Reported by: Ben Winslow
Patches: chan_sip.c-mwi_multi_mailbox_fix-1.6.2.13.diff (License #5288) patch uploaded by Ben Winslow
JIRA ASTERISK-17183
Multi-parkinglot directs calls to wrong parkinglot.
JIRA ASTERISK-17870
Cannot retrieve parked calls.
JIRA ASTERISK-17430
ParkedCall() with no extension should pickup first available call and does not.
JIRA AST-576
Issues with parking lots
* Removed searching for parking lots by extension. Parking lots can only
be found by the parking lot name since parking lot access extensions and
spaces are not guaranteed to be unique.
* Added parking_lot_name option to the Park and ParkedCall applications.
Updated documentation for Park and ParkedCall applications.
* Add parkext_exclusive configuration option to make parking entry
extensions specify which parking lot they access.
(closes issue ASTERISK-17183)
Reported by: David Cabrejos
Tested by: rmudgett, David Cabrejos
(closes issue ASTERISK-17430)
Reported by: Philippe Lindheimer
JIRA ASTERISK-17452
Parking_offset not used
JIRA AST-624
'next' setting for findslot does nothing
* Reimplemented since findslot feature option broken by -r114655.
(closes issue ASTERISK-17452)
Reported by: David Woolley
Tested by: rmudgett
JIRA ASTERISK-15792
Dialplan continues execution after transfer to park.
This happens for DTMF attended transfer, DTMF blind transfer, and DTMF
one-touch-parking if the party initiating these features also initiated
the call.
* Fixed the return code from the affected builtin features when parking a
call.
Added the 'storesipcause' option to sip.conf to allow the user to disable the
setting of HASH(SIP_CAUSE,<chan name>) on the channel.
Having chan_sip set HASH(SIP_CAUSE,<chan name>) on the channel carries a
significant performance penalty because of the usage of the MASTER_CHANNEL()
dialplan function.
Holding the channel lock when calling update_queue which attempts to lock the
queue lock can cause a deadlock. This deadlock involves the following chain:
1. hold chan lock -> wait queue lock
2. hold queue lock -> wait agent list lock
3. hold agent list lock -> wait chan list lock
4. hold chan list lock -> wait chan lock
........
AMI actions DAHDIHangup and DAHDITransfer have no effect.
The AMI actions DAHDIHangup and DAHDITransfer have no effect on a DAHDI
channel. These two AMI actions are highly specialized to analog channels
and appear to make the channel behave like a jack port for headsets.
* Made the faked DAHDI event get processed before a normal media stream
read in dahdi_read() instead of trying to trigger an exception read by
setting the AST_FLAG_EXCEPTION flag. Apparently a change was made long
ago that changed how AST_FLAG_EXCEPTION is processed in the core.
Unfortunately, the faked DAHDI events no longer worked when that happened.
* Updated the DAHDI AMI action documentation for the following actions:
DAHDITransfer, DAHDIHangup, DAHDIDialOffhook, DAHDIDNDon, DAHDIDNDoff,
DAHDIShowChannels, and DAHDIRestart.
* Made use sscanf() instead of atoi() for better error checking of the
DAHDIChannel header string.
Logger does not warn of failure to open logging channels
Currently, logger only prints an error message to stderr when it fails to open
a logger channel where many users will not see it because the logger lock is
held. The alternative provided by this patch is to log the error to all
attached consoles in the hopes that it will be easier to see. Additionally,
this patch prevents the failed logger channel from being added to the list
where it would silently fail on each call to the Asterisk logger.
Any SIP notify sent via AMI or CLI leaks a SIP PVT with ref count +2. Removing
the additional ref just before the invite and adding an unref following it
corrects the issue as seen via REF_DEBUG. The unref existed in a distant
revision and it appears as though the wrong ref operation was removed.
Output of queue log not started until logger reloaded.
ASTERISK-15863 caused a regression with queue logging. The output of the
queue log is not started until the logger configuration is reloaded.
* Queue log initialization is completely delayed until the first message
is posted to the queue log system. Including the initial opening of the
queue log file.
* Fixed rotate_file() ROTATE strategy to give the file just rotated out to
the configured exec function after rotate. Just like the other strategies.
* Fixed logger reload to always post the queue reload entry instead of
just if there is a queue log file.
* Refactored some code to eliminate some redundancy and to reduce stack
utilization.
(closes issue ASTERISK-17036)
JIRA SWP-2952
Reported by: Juan Carlos Valero
Patches:
jira_asterisk_17036_v1.8.patch (license #5621) patch uploaded by rmudgett
Tested by: rmudgett
(closes issue ASTERISK-18208)
Reported by: Christian Pinedo
AMI action ModuleReload returns Error if Module: missing or empty
An empty string was not being checked for properly causing identification of
the module to be reloaded to fail and return an Error with message
"No such module."
* Add some reentrancy protection in pbx.c when creating the contexts_table
hash table.
* Fix inverted test in chan_sip.c conditional code.
* Fix uninitialized variable and use of the wrong variable in chan_iax2.c.
* Fix test of return value in app_parkandannounce.c. Explicitly testing
for -1 is bad if the function does not actually return that value when it
fails.
* Fixup some comments and add some curly braces in features.c.
........
Alexandr Anikin [Tue, 9 Aug 2011 16:36:39 +0000 (16:36 +0000)]
Setup IP proto version for call in GK mode
Added additional check for IP semantics before parse destination
by ast_parse_args due to it can parse numeric as IP.
Alexandr Anikin [Tue, 9 Aug 2011 16:16:55 +0000 (16:16 +0000)]
Merged revisions 331146 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8
........
r331146 | may | 2011-08-09 20:13:09 +0400 (Tue, 09 Aug 2011) | 4 lines
move ast_cond_signal for admitted call after all data filled/freed
clear all log channels by pointed number not only first
free allocated callToken in ooh323_answer
........
Terry Wilson [Mon, 8 Aug 2011 21:12:51 +0000 (21:12 +0000)]
Replace AMI Unlink events with Bridge events
A previous update converted some of the Link and Unlink events to
Bridge events, but a couple of Unlink events were missed. This patch
rectifies the situation.
If the seek value is past the end of file when resuming G.722 MOH, MOH will
cease to function for the duration of the MOH session through all starts and
stops until saved state is cleared. Adjusting the code to guarantee a single
valid read (which is already assumed) fixes the bug.
(closes issue ASTERISK-18077)
Review: https://reviewboard.asterisk.org/r/1328/ Tested-by: Jonathan Rose <jrose@digium.com>
........
editing files in main/editline does not ensure rebuild of libedit.a
When editing a source file in main/editline, the build system does not rebuild
libedit.a and uses the already existing one instead. Adding a PHONY to
CHECK_SUBDIR fixes this problem.
(closes issue ASTERISK-16221) Patch-by: Walter Doekes
........
Call pickup broken for DAHDI channels when beginning with #
The call pickup feature did not work on DAHDI devices for anything other than
feature codes beginning with * since all feature codes in chan_dahdi were
originally hard-coded to begin with *. This patch is also applied to
chan_dahdi.c to fix this bug with radio modes.
Asterisk 18103 - Fix reload crash caused by destroying default parking lot
Default parking lot was being destroyed in reload and was not being rebuilt properly.
This patch keeps features.c reload from destroying the default parking lot in 1.6.2.
Bug was caused by a hasty backport which didn't test reload enough times to catch the
problem.
Incorrect playback for Spanish in some circumstances
When you say the time in spanish and it is 01:00 - 01:59 or 13:00 - 13:59 you
must use female pronunciation "1F". The function "say_date_with_format_es" does
not take this in account.
(closes ASTERISK-15016) Patch-by: Luis Jimenez
........