Jeff Peeler [Tue, 23 Mar 2010 21:17:23 +0000 (21:17 +0000)]
Exit native bridging early for greater timing accuracy with warnings
This changes native bridging to break one millisecond early so that the more
accurate timeval calculations done in the generic bridge can be performed using
the bridge config. Currently the time between exiting native bridging slightly
late can sometimes cause a large enough discrepancy for warnings to be missed.
For the record, 1.4 does not attempt to native bridge at all when warnings are
enabled.
Allow out-of-tree modules to load, regardless of DEBUG_THREADS/DEBUG_CHANNEL_LOCKS differences.
This can be guaranteed by forcing the ABI to no longer change when these compiler flags are set.
An unfortunate side-effect to this is that there is an ABI change here. However, there is some
mitigation. Existing modules *will* fail to load since they would require functions that no
longer exist.
Kevin P. Fleming [Tue, 23 Mar 2010 14:22:27 +0000 (14:22 +0000)]
Change per-file debug and verbose levels to be per-module, the way
users expect them to work.
'core set debug' and 'core set verbose' can optionally change the
level for a specific filename; however, this is actually for a
specific source file name, not the module that source file is included
in. With examples like chan_sip, chan_iax2, chan_misdn and others
consisting of multiple source files, this will not lead to the
behavior that users expect. If they want to set the debug level for
chan_sip, they want it set for all of chan_sip, and not to have to
also set it for reqresp_parser and other files that comprise the
chan_sip module.
This patch changes this functionality to be module-name based instead
of file-name based.
To make this work, some Makefile modifications were required to ensure
that the AST_MODULE definition is present in each object file produced
for each module as well.
Mark Michelson [Mon, 22 Mar 2010 20:32:15 +0000 (20:32 +0000)]
Initialize channels prior to loading "preload" modules.
We can have bad results when a module, upon being loaded, attempts
to reference the channels container if the container hasn't yet
been initialized. I saw this happen by trying to preload pbx_config.so
and having a hint defined which referenced a non-existent SIP peer.
Alec L Davis [Fri, 19 Mar 2010 07:37:00 +0000 (07:37 +0000)]
prevent segfault if bad magic number is encountered.
internal_ao2_ref uses INTERNAL_OBJ which mzy report 'bad magic number', but
internal_ao2_ref continues on, causing segfault.
Although AO2_MAGIC number is checked by INTERNAL_OBJ before internal_ao2_ref is
called, A02_MAGIC is being destroyed (or a wrong pointer) by the time
internal_ao2_ref uses INTERNAL_OBJ.
internal_ao2_ref now returns -1 if INTERNAL_OBJ encouters a bad magic number.
Tilghman Lesher [Tue, 16 Mar 2010 23:49:35 +0000 (23:49 +0000)]
Mask out previous arguments on each nested invocation of Gosub.
(closes issue #16758)
Reported by: wdoekes
Patches:
20100316__issue16758.diff.txt uploaded by tilghman (license 14)
Sean Bright [Tue, 16 Mar 2010 19:36:24 +0000 (19:36 +0000)]
Include an extra newline after "Aliased CLI command" to get back the prompt.
The other issue mentioned in this bug will be more difficult to resolve since we
have no idea (right now) of knowing if the command that is aliased has been
installed yet.
Russell Bryant [Tue, 16 Mar 2010 19:01:04 +0000 (19:01 +0000)]
Merged revisions 252766 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r252766 | russell | 2010-03-16 14:00:43 -0500 (Tue, 16 Mar 2010) | 6 lines
Don't treat warnings as errors for muted.
muted supports OS X, but uses functions marked as deprecated in 10.6. However,
the functions are still supported, so just ignore the warnings for now and
allow the build to proceed.
........
Fixing up a couple more overlapping global variable namespaces shared with
extensions.conf.sample. Also noticed a few of the lines that were commented
out didn't have the closing semi-colon so I added that as well.
Kevin P. Fleming [Mon, 15 Mar 2010 22:48:38 +0000 (22:48 +0000)]
Improve handling of values supplied to FAXOPT(ecm).
Previously, values that began with whitespace were silently treated as 'no',
and all non-'yes' values were also treated as 'no'. Now the supplied value
is specifically checked for a 'yes' or 'no' (or equivalent) value, after skipping
leading whitespace. If the value is not valid, then a warning message is generated.
Update extensions.ael file to not overlap extensions.conf.
Updated the extensions.ael file so the global variables don't overlap
those that we have in extensions.conf (sample files). This way unexpected
things won't happed hopefully if both pbx_ael and res_config are loaded.
Alexandr Anikin [Sun, 14 Mar 2010 14:42:59 +0000 (14:42 +0000)]
generate roundtrip delay requests and responses
added response to roundtrip delay requests from opposite side
added roundtrip delay request sending to opposite side after answer,
added options for sending request (interval between request and
count of unreplied requests before forced call hangup)
Russell Bryant [Sat, 13 Mar 2010 22:21:18 +0000 (22:21 +0000)]
Resolve unit test failure that occurred on Mac OSX.
On Linux (glibc), regcomp() does not return an error for an empty string.
However, the version on OSX will return an error. The test for channel group
matching by regex now passes on the mac, as well.
Terry Wilson [Fri, 12 Mar 2010 22:04:51 +0000 (22:04 +0000)]
Only change the RTP ssrc when we see that it has changed
This change basically reverts the change reviewed in
https://reviewboard.asterisk.org/r/374/ and instead limits the
updating of the RTP synchronization source to only those times when we
detect that the other side of the conversation has changed the ssrc.
The problem is that SRCUPDATE control frames are sent many times where
we don't want a new ssrc, including whenever Asterisk has to send DTMF
in a normal bridge. This is also not the first time that this mistake
has been made. The initial implementation of the ast_rtp_new_source
function also changed the ssrc--and then it was removed because of
this same issue. Then, we put it back in again to fix a different
issue. This patch attempts to only change the ssrc when we see that
the other side of the conversation has changed the ssrc.
It also renames some functions to make their purpose more clear.
Jeff Peeler [Wed, 10 Mar 2010 23:15:55 +0000 (23:15 +0000)]
Add new unit test for stringfields.
(Copied from reviewboard)
Tests the following:
1. Basic allocation and setting of string fields.
2. Shrinking a string field and re-expanding it.
3. Growing the last allocation in a string field pool.
4. Setting a string to a large value such that a new string field pool must be
allocated.
In each part, we make sure that the string field is accurate (has the correct
value in it), make sure that the 2 bytes before the string field has the correct
capacity for the field, and for tests 2-4, we make sure that the string field is
where we expect it to be in memory.
Also tested:
5. Shrinking a string field and partially re-expanding it.
6. Setting strings in such a way as to create three separate string field pools
and then removing the middle pool.
There is a bug fix in the init function, which ensures the embedded_pool is set
to NULL which is important for stack allocated structures.
Leif Madsen [Wed, 10 Mar 2010 20:53:43 +0000 (20:53 +0000)]
Be less ambiguous in Record() app docs.
For some reason the documentation for the 'k' application in trunk
and 1.6.2 is different than 1.6.0 and 1.6.1, so I'm setting them all
to match. The wording in 1.6.2 and trunk was ambiguous, so you could
interpret the wording the mean that recording would continue upon hangup
indefinitely, or you could interpret it to mean that the recorded
data would not be discarded upon hangup. This change makes it clear
we mean the latter, and not the former.
Jeff Peeler [Wed, 10 Mar 2010 20:51:23 +0000 (20:51 +0000)]
Fix ParkAndAnnounce not respecting parking options.
The patch ensures that if a peer does not exist, parking settings are read from
the channel. A unit test has been written to ensure proper operation for both
standard parking and parking using masquerades.
Jeff Peeler [Wed, 10 Mar 2010 18:25:18 +0000 (18:25 +0000)]
Fix jitterbuffer logging not creating logfiles.
Three changes made here:
1) Do not fail if a previous log does not exist (in fact, this is probably
expected).
2) Ensure that the file descriptor to write to gets assigned properly. I am at
a loss as to why assigning safe_fd outside the if fixes this, but it makes
the if statement slightly less complicated anyway.
3) Move up the failure message so that the errno of the failure is not
overwritten by fclose.
Richard Mudgett [Wed, 10 Mar 2010 03:16:50 +0000 (03:16 +0000)]
Reduce the amount of database access for HAVE_PRI_SERVICE_MESSAGES.
Rework HAVE_PRI_SERVICE_MESSAGES to not use the active values directly
from the database. Database access is likely expensive. Database access
now only happens on initialization, destruction, and when the B channel is
taken in or out of service.
This change is not related to call waiting but it would cause the search
for a call waiting interface to be very expensive and slow down D channel
message servicing.
Fix Debian init script to not use -c.
When using the init script as-is currently, it could cause issues on Debian
such as high CPU usage. This fix has worked for several people so I'm
implementing the change.
Clean transmit_* for start/stop media transmission
Small patch changing skinny_set_rtp_peer to use transmit_stopmediatransmission and to use new transmit_startmediatransmission.
Basic testing on 30VIP's by wedhorn
Basic testing on 7960 by me
Broke the various functions included in transmit_callstate to their own functions. Transmit_callstate now just transmits callstate.
Generally left the functionality as it was, which highlight some minor code issues (eg multiple transmit_callstate's). I did however revise the hint code usage of the old transmit_callstate as it it not appropriate to put a device on hook based on the change of a hinted device.
Russell Bryant [Sat, 6 Mar 2010 14:16:20 +0000 (14:16 +0000)]
Fix a crash in SIP blind transfer handling found by an automated external test.
The first real test added to the external test suite found a pretty nasty crash
that occurred in Asterisk trunk. The crash was due to a race condition between
the REFER handling and channel destruction in the channel thread. After the
transfer has been completed, we go back to the transferrer channel and try to
lock it so we can fire off a CEL event. However, there was no guarantee that
the channel was still around at that point since it's racing against the channel
thread.
Since ast_channel is a reference counted object, the fix is simple. The code
unlocks the transferrer channel before finally completing the transfer with
an async goto. At this point the channel thread is going to start call tear
down and the channel will eventually be destroyed. To ensure that the channel
is valid when we want to fire off the CEL event, increase the channel's
reference count.
David Vossel [Fri, 5 Mar 2010 20:21:13 +0000 (20:21 +0000)]
PITCH_SHIFT dialplan function
The PITCH_SHIFT function can be used on a channel to independently
modify the pitch of both rx and tx audio streams. Now you can
improve your conference calls by assigning a random pitch effect
to everyone entering a meetme room, or just make your day more
interesting by making your co-workers sound funny. These are just
some of the numerious practical uses for this function. Enjoy!
Russell Bryant [Fri, 5 Mar 2010 05:03:41 +0000 (05:03 +0000)]
Fix up some of chan_sip's usage of the RTP engine API.
The get_local_address() function for an RTP instance was used when building an
SDP, but the results were not honored. The RTP engine activate() function was
not being used once we have determined that media will now flow.
Russell Bryant [Fri, 5 Mar 2010 02:07:33 +0000 (02:07 +0000)]
Fix up the ast_rtp_property enum.
The mis-placement of the latest entry meant that when it was set, it was writing
one index past the end of the properties array in the ast_rtp_instance (which
happened to be the local_address field).
A complete re-write of the Local channel documentation has been performed, with
the existing information from localchannel.txt and localchannel.tex merged in.
Leif Madsen [Wed, 3 Mar 2010 21:22:55 +0000 (21:22 +0000)]
Update existing Local channel documentation.
A complete re-write of the Local channel documentation has been performed, with
the existing information from localchannel.txt and localchannel.tex merged in.
Make sure to clear red alarm after polarity reversal.
From the issue:
The automatic overnight line tests (or manual ones) used on UK (BT) lines causes
a red alarm on a dahdi / TDM400P connected channel. This is because the line
uses voltage tests (battery loss) and polarity reversal. The polarity reversal
causes chan_dahdi to initiate v23 CallerID processing but during this the event
DAHDI_EVENT_NOALARM is ignored so that the alarm is never cleared.
When Asterisk receives an IAX2 TXREQ packet, try_transfer()
will call store_by_transfercallno() to link the chan_iax2_pvt
struct into iax_transfercallno_pvts. If a duplicate TXREQ
packet is received for the same call, the pvt struct will be
linked into iax_transfercallno_pvts multiple times. This patch
fixes this. Thanks rain for debugging this and providing a patch!
Jeff Peeler [Wed, 3 Mar 2010 17:37:30 +0000 (17:37 +0000)]
Add new config option to control AMI alarm event reporting in chan_dahdi.
New config parameter "reportalarms" added in chan_dahdi.conf which supports the
following possible values:
"channels": report each channel alarms (current behavior, default for backward compatibility)
"spans": report an "SpanAlarm" event when the span of any configured channel is alarmed
"all": report channel and span alarms (aggregated behavior)
"none": do not report any alarms