AST_RWLOCK_INIT_VALUE is always defined. What we really wanted to ask is
whether autoconf detected a static initializer value. This fixes rwlocks
on all such platforms (mainly, Mac OS X).
(closes issue #13767)
Reported by: jcovert
Patches:
20090121__bug13767.diff.txt uploaded by Corydon76 (license 14)
Tested by: jcovert, Corydon76
........
Read lock the contexts to maintain the locking order when we are notified that the state of a device has changed.
(closes issue #13839)
Reported by: mcallist
........
Mark Michelson [Wed, 21 Jan 2009 21:53:55 +0000 (21:53 +0000)]
Further fix some oddities in sip show users and sip show peers logic
ccesario on IRC pointed out that his sip peers were not displayed
properly when he would issue the command "sip show peers." The problem
was that the onlymatchonip field was used to determine if the endpoint
was a "peer" or "user." The tricky part is that a "friend" is supposed
to be treated as both a "user" and a "peer" but the logic would not allow
"friends" to show up as "peers" since onlymatchonip was set to FALSE
for friends.
I have modified the sip_peer structure to more explicitly keep track of
what type endpoint it is so that the various manager and CLI commands
will display the expected information
Extra NULLs in the output cause some terminal types to abort in the middle of
a color code, causing terminal weirdness.
(closes issue #14130)
Reported by: coolmig
Patches:
20090121__bug14130.diff.txt uploaded by Corydon76 (license 14)
Tested by: Corydon76, coolmig
........
Mark Michelson [Wed, 21 Jan 2009 00:33:32 +0000 (00:33 +0000)]
Fix device state parsing issues for channel names with multiple slashes
The fix being applied is a bit different for trunk and the 1.6.X branches.
For trunk, we only wish to strip off the characters beyond the second slash
if the channel is a Local channel (i.e. we are removing the /n from the device
name). Other channel technologies with multiple slashes (e.g. DAHDI) need the
information after the second slash in order to get the proper device state
information.
In addition to this fix, the 1.6.X branches are receiving a much more important
fix as well. The problem in 1.6.X is that the member's device name was being directly
changed instead of having a copy changed. This meant that we would strip off the
second slash and trailing characters and then leave the member's device name like
that permanently thereafter.
Mark Michelson [Tue, 20 Jan 2009 20:10:31 +0000 (20:10 +0000)]
Convert the character pointers in a sip_request to be pointer offsets
When an ast_str expands to hold more data, any pointers that were pointing
to the data prior to the expansion will be pointing at invalid memory. This
change makes such pointers used in chan_sip.c instead be offsets from the
beginning of the string so that the same math may be applied no matter where
in memory the string resides.
To help ease this transition, a macro called REQ_OFFSET_TO_STR has been added
to chan_sip.c so that given a sip_request and an offset, the string at that
offset is returned.
Terry Wilson [Tue, 20 Jan 2009 19:22:24 +0000 (19:22 +0000)]
Make a proper builtin attended transfer to parking work
This is an ugly hack from 1.4 that allows the timeout callback from a parked
call to use the right channel name for the callback when the park is done with
a builtin attended transfer (that isn't completed early). This hasn't ever
worked in trunk and no one has complained yet, so eh.
Kevin P. Fleming [Mon, 19 Jan 2009 21:42:46 +0000 (21:42 +0000)]
ast_str_SQLGetData is *not* part of the ast_str API, it's part of the ast_odbc API and just happens to use an ast_str as the buffer; move all of it to res_odbc.c and res_odbc.h, renaming appropriately
along the way fix some minor coding style issues in strings.h and add some attribute_pure annotations to functions in the ast_str API
Michiel van Baak [Mon, 19 Jan 2009 20:09:11 +0000 (20:09 +0000)]
Redo the event-based MWI in chan_skinny.
Dan saw regular segfaults with the old implementation and
rewrote it to make it really eventbased.
I altered it to be trunk compatible and wedhorn gave some feedback
and ideas how to make it even better.
(closes issue #13821)
Reported by: DEA
Patches:
chan_skinny-mwi-events.txt uploaded by DEA (license 3)
Tested by: mvanbaak, DEA
Prevent a crash in chan_local due to a potential NULL pointer dereference
Move the check for if both channels on a local_pvt have generators to below
where p->chan is checked for NULLity (NULLness?). This prevents a crash from
occurring if p->chan is NULL.
Doug Bailey [Sat, 17 Jan 2009 18:26:44 +0000 (18:26 +0000)]
Add discriminator for when ring pulse alert signal is used to preface MWI spills
This prevents the situation when MWI messages are added to caller ID spills causing the channel to be hung up
Account for possible NULL pointer when we receive a 408 in response to a REGISTER
It may be that by the time we receive a reply to a REGISTER request, the attempt has
timed out and thus the registry structure pointed to by the corresponding sip_pvt has
gone away. This situation was handled properly for a 200 OK response, but the 408
case assumed that the sip_registry struct was non-NULL, thus potentially causing a crash
This commit fixes this assumption and prints out a message to the console if we should
receive a late 408 response to a REGISTER
Convert call to park_call_full to masq_park_call_announce
Since we removed the AST_PBX_KEEPALIVE return value, we need to use masqueraded
parking, otherwise we will try to call ast_hangup() in __pbx_run() and in
do_parking_thread() and then promptly crash.
(closes issue #14215)
Reported by: waverly360
Tested by: otherwiseguy
(closes issue #14228)
Reported by: kobaz
Tested by: otherwiseguy
........
The reason was that the timing module was written under the assumption
that timerfd_timer_set_rate would not be called between enabling and
disabling continuous mode. What happened in this situation was that
timerfd_timer_enable_continuous saved off our previously set timer (in this
situation a 0 timer, meaning it never runs out). Then timerfd_timer_disable_continuous
would restore this 0 timer, even though it logically should set the timer to be whatever
was set in timerfd_timer_set_rate.
Now the behavior in timerfd_timer_set_rate is to overwrite the saved timer that may
or may not have been set in timerfd_timer_enable_continuous. Even if
timerfd_timer_enable_continuous has not been previously called, this will not harm the
operation.
Thanks to Terry Wilson for discovering the problem and giving me a really great debug
capture that pointed out the problem clearly
Fix the conjugation of Russian and Ukrainian languages.
(related to issue #12475)
Reported by: chappell
Patches:
vm_multilang.patch uploaded by chappell (license 8)
........
This patch fixes a problem where a goto (or jump, in this case)
fails a consistency check because it can't find a matching
extension. The problem was a missing instruction to end
the range notation in the code where it converts the pattern
into a regex and uses the regex code to determine the match.
I tested using the AEL code the user supplied, and now,
the consistency check passes.
Kevin P. Fleming [Thu, 15 Jan 2009 20:18:53 +0000 (20:18 +0000)]
remove the PBX_ODBC logic from the configure script, and add GENERIC_ODCB logic that includes copying the relevant LIB and INCLUDE data from either UnixODBC or iODBC, based on which was found; if both were found, prefer UnixODBC
this stops modules from being linked against both sets of libraries on systems that have both installed
Mark Michelson [Thu, 15 Jan 2009 19:00:06 +0000 (19:00 +0000)]
Remove an unneeded condition for line addition to a SIP request/response
In Asterisk 1.4 and 1.6.0, the sip_request structure had a statically
allocated buffer to hold the text of the request. There was a check in the
add_line function to not attempt to write the line into the buffer if we
did not have room for it.
In trunk and Asterisk versions starting with 1.6.1, an expandable ast_str
structure is used to hold the text. Since it may grow to fit an arbitrarily
sized string, this check in add_line is no longer valid.
I found this oddity while attempting to fix issue #14220; however, I do not
believe that this is the fix for that issue since the output supplied by the
reporter did not contain the warning message that would be printed had this
condition been satisfied.
Olle Johansson [Thu, 15 Jan 2009 18:08:59 +0000 (18:08 +0000)]
Make sure that we have the same terminology in sip.conf.sample and the source code warning.
Thanks Nick Lewis for pointing this out in the bug tracker.
Sean Bright [Thu, 15 Jan 2009 15:33:18 +0000 (15:33 +0000)]
Add a missing unlock and properly handle the 'maxusers' setting on MeetMe
conferences. We were using the 'user number' field to compare against the
maximum allowed users, which works assuming users with lower user numbers
didn't leave the conference.
Fix some crashes from bad datastore handling in app_queue.c
* The queue_transfer_fixup function was searching for and removing
the datastore from the incorrect channel, so this was fixed.
* Most datastore operations regarding the queue_transfer datastore
were being done without the channel locked, so proper channel locking
was added, too.
* Fixed create_process() allocation of process ID values.
The allocated process IDs could overflow their respective
NT and TE fields. Affects outgoing calls.
........
Doug Bailey [Wed, 14 Jan 2009 21:19:45 +0000 (21:19 +0000)]
This fixes a problem where MWI FSK spills were being injected onto off hook fxs lines.
(closes issue #14143)
Reported by: alecdavis
Patches:
chan_dahdi-14143.patch.txt uploaded by dbailey (license )
Tested by: alecdavis
Michiel van Baak [Wed, 14 Jan 2009 19:36:57 +0000 (19:36 +0000)]
Fix compilation on FreeBSD and OSX
This started as work to fix the 'core show sysinfo'
CLI command but while working on it oej
pointed out that read_credentials did not compile neither.
So while being there, fix that as well.
Don't read into a buffer without first checking if a value is beyond the end.
(closes issue #13600)
Reported by: atis
Patches:
20090106__bug13600.diff.txt uploaded by Corydon76 (license 14)
Tested by: atis
........
Fix a logic error I found while searching through chan_agent.c
I found that the allow_multiple_logins function would never return
0 due to an incorrect comparison being used when traversing the
list of agents. While I was modifying this function, I also did
a little bit of coding guidelines cleanup, too.
Don't overflow when paging more than 128 extensions
The number of available slots for calls in app_page was hardcoded to 128.
Proper bounds checking was not in place to enforce this limit, so if more than
128 extensions were passed to the Page() app, Asterisk would crash. This patch
instead dynamically allocates memory for the ast_dial structures and removes
the (non-functional) arbitrary limit.
This issue would have special importance to anyone who is dynamically creating
the argument passed to the Page application and allowing more than 128
extensions to be added by an outside user via some external interface.
The patch posted by a_villacis was slightly modified for some coding guidelines
and other cleanups. Thanks, a_villacis!
(closes issue #14217)
Reported by: a_villacis
Patches: 20080912-asterisk-app_page-fix-buffer-overflow.patch uploaded by a (license 660)
Tested by: otherwiseguy
........
Mark Michelson [Tue, 13 Jan 2009 22:30:59 +0000 (22:30 +0000)]
Clarify a message that app_queue prints and change to a debug-level message
The "No one is answering..." verbose message contained 3 numbers that were not
explained in any way to whoever was viewing the message. It is more helpful now
since the message explains what the numbers mean. Also, the message has been
downgraded to "DEBUG" level.
Mark Michelson [Tue, 13 Jan 2009 21:18:13 +0000 (21:18 +0000)]
Allow specifying a port number in the user portion of a register => line in sip.conf
With this commit, a register => line in sip.conf may contain a port number in the
"user" section of the line. Please see CHANGES and sip.conf.sample for more
details regarding this.
(closes issue #14198)
Reported by: Nick_Lewis
Patches:
chan_sip.c-domainport2.patch uploaded by Nick (license 657)
Tested by: Nick_Lewis
If either conditional is NULL, don't try copying it.
(closes issue #14226)
Reported by: caspy
Patches:
20090113__bug14226.diff.txt uploaded by Corydon76 (license 14)
........
Repeat attempts to write when we receive -EAGAIN from the driver, as detailed
in the ALSA sample code (see http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2pcm_8c-example.html#a32)
Reported by: Jerry Geis (via the -users list)
Fixed by: me (license 14)
........
Mark Michelson [Mon, 12 Jan 2009 23:12:30 +0000 (23:12 +0000)]
bump the verbosity of a message in srv.c up by one. It used to be
at this level prior to a large patch merge which converted ast_verbose
calls to ast_verb
This gits rid of the notion of an owning_app allowing the request and hangup to be initiated by different threads. Originating from an active agent channel requires this. The implementation primarily changes __login_exec to wait on a condition variable rather than a lock.
I am reverting the fix made in revision 168128 (and its upward merges)
after being contacted by Olle Johansson and being shown how this fix is
incorrect. Thanks to Olle for clearing this up for me.
INFO, NOTIFY, OPTIONS, REFER, and MESSAGE requests
were not checking the topmost Via to determine where
to send the response. Adding check_via calls to those
request handlers solves this.
Tilghman Lesher [Thu, 8 Jan 2009 21:32:45 +0000 (21:32 +0000)]
Textual changes, consistency in status variable naming, and other minor bugs.
(closes issue #13943)
Reported by: Marquis
Patches:
minivm_trunk_fixes3.patch uploaded by Marquis (license 32)
Mark Michelson [Thu, 8 Jan 2009 19:48:42 +0000 (19:48 +0000)]
Add the average talk time for a queue
This patch adds the functionality to app_queue of calculating
the average amount of time that channels are bridged for a
queue. The algorithm used to calculate the average is the same
exponential average currently used to calculate the average holdtime.
See the CHANGES file to see the methods you may use to view this
information.