Jonathan Rose [Tue, 28 Feb 2012 18:23:02 +0000 (18:23 +0000)]
Changes transport option in sip.conf so that using multiple instances doesn't stack.
Prior to this patch, Using "transport=" multiple times would cause them to add to one
another like allow/deny. This patch changes that behavior to simply use the transport
option specified last. Also, if no transport option is applied now, the default will
automatically be UDP.
(closes ASTERISK-19352)
Reported by: jamicque
Patches:
asterisk-19352-transport-warning-message-v1.patch uploaded by Michael L. Young (license 5026)
issueA19352_no_transport_is_udp.patch uploaded by Walter Doekes (license 5674)
Review: https://reviewboard.asterisk.org/r/1745/diff/#index_header
........
Merged revisions 357266 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 357271 from http://svn.asterisk.org/svn/asterisk/branches/10
The OBJ_NOLOCK and AO2_ITERATOR_DONTLOCK flags have a slight meaning
change. They no longer mean that the object is protected by an external
mechanism. They mean the lock associated with the object has already been
manually obtained by one of the ao2_lock calls. This change is necessary
for RWLOCK support since they are not reentrant. Also an operation on an
ao2 container may require promoting a read lock to a write lock by
releasing the already held read lock to re-acquire as a write lock.
API calls to be more flexible and to allow an anticipated enhancement to
control linking duplicate objects into a container.
The changes to format.c and format_cap.c are taking advantange of the new
ao2 locking options to simplify the use of the format capabilities
containers.
Kevin P. Fleming [Tue, 28 Feb 2012 14:47:23 +0000 (14:47 +0000)]
Make COMPILE_DOUBLE magic actually work.
The build system has some special magic to ensure that if Asterisk is built
with --enable-dev-mode *and* DONT_OPTIMIZE, that all the source is still compiled
with the optimizer enabled (even though the result will be thrown away), because
the compiler is able to find a great deal of coding errors and bugs as a result
of running its optimizers. Unfortunately at some point this mode got broken,
and the 'throwaway' compile of the code was no longer done with the optimizer
enabled. This patch corrects that problem.
........
Merged revisions 357212 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 357213 from http://svn.asterisk.org/svn/asterisk/branches/10
Richard Mudgett [Tue, 28 Feb 2012 00:42:38 +0000 (00:42 +0000)]
Add ability to clone ao2 containers.
Occasionally there is a need to put all objects in one container also into
another container.
Some reasons you might need to do this:
1) You need to reconfigure a container. You would do this by creating a
new container with the new configuration and ao2_container_dup the old
container into it. Then replace the old container with the new. Then
destroy the old container.
2) You need the contents of a container to remain stable while operating
on all of the objects. You would do this by creating a cloned container
of the original with ao2_container_clone. The cloned container is a
snapshot of the objects at the time of the cloning. When done, just
destroy the cloned container.
Richard Mudgett [Tue, 28 Feb 2012 00:17:19 +0000 (00:17 +0000)]
Fix ast_channel allocation init setting priority to -1 instead of 1.
* Fix opaquification conversion error.
(closes issue ASTERISK-19424)
Reported by: Jeremy Pepper
Patches:
asterisk-19424-initialize_priority_regression.diff (license #5026) patch uploaded by Michael L. Young
Kinsey Moore [Mon, 27 Feb 2012 16:50:19 +0000 (16:50 +0000)]
Deprecated macro usage for connected line, redirecting, and CCSS
This commit adds GoSub alternatives to connected line, redirecting, and CCSS
macro hooks so that macro can finally be deprecated. This also adds
deprecation warnings for those features when used and in documentation.
Jonathan Rose [Mon, 27 Feb 2012 16:24:17 +0000 (16:24 +0000)]
Adds an option to sip.conf that prevents diversion headers from being added.
send_diversion=no will prevent Diversion headers from being added to SIP
requests. This doesn't prevent Diversion from being added with dialplan
such as with SIPAddHeader.
Matthew Jordan [Sat, 25 Feb 2012 17:22:55 +0000 (17:22 +0000)]
Fix crash in app_voicemail during close_mailbox
In r354890, a memory leak in app_voicemail was fixed by properly disposing of
the allocated heard/deleted pointers. However, there are situations,
particularly when no messages are found in a folder, where these pointers are
not allocated and not NULL. In that case, an invalid free would be attempted,
which could crash app_voicemail. As there are a number of code paths where
this could occur, this patch uses the number of messages detected in the folder
before it attempts to free the pointers. This resolves the crash detected in
the Asterisk Test Suite's check_voicemail_nominal test.
........
Merged revisions 356797 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 356798 from http://svn.asterisk.org/svn/asterisk/branches/10
Matthew Jordan [Fri, 24 Feb 2012 17:43:26 +0000 (17:43 +0000)]
Remove srtp_shutdown from res_srtp
The patch for ASTERISK-19253 included properly shutting down the libsrtp
library in the case of module unload. Unfortunately, not all distributions
have the srtp_shutdown call. As such, this patch removes calling
srtp_shutdown.
........
Merged revisions 356650 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 356651 from http://svn.asterisk.org/svn/asterisk/branches/10
Matthew Jordan [Fri, 24 Feb 2012 15:10:35 +0000 (15:10 +0000)]
Allow SRTP policies to be reloaded
Currently, when using res_srtp, once the SRTP policy has been added to the
current session the policy is locked into place. Any attempt to replace an
existing policy, which would be needed if the remote endpoint negotiated a new
cryptographic key, is instead rejected in res_srtp. This happens in particular
in transfer scenarios, where the endpoint that Asterisk is communicating with
changes but uses the same RTP session.
This patch modifies res_srtp to allow remote and local policies to be reloaded
in the underlying SRTP library. From the perspective of users of the SRTP API,
the only change is that the adding of remote and local policies are now added
in a single method call, whereas they previously were added separately. This
was changed to account for the differences in handling remote and local
policies in libsrtp.
Review: https://reviewboard.asterisk.org/r/1741/
(closes issue ASTERISK-19253)
Reported by: Thomas Arimont
Tested by: Thomas Arimont
Patches:
srtp_renew_keys_2012_02_22.diff uploaded by Matt Jordan (license 6283)
(with some small modifications for this check-in)
........
Merged revisions 356604 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 356605 from http://svn.asterisk.org/svn/asterisk/branches/10
Richard Mudgett [Thu, 23 Feb 2012 20:14:54 +0000 (20:14 +0000)]
Fix blind transfer parking issues if the dialed extension is not recognized as a parking extension.
Custom parking extensions may not be coded such that the first and only
extension priority is the Park application. These custom parking
extensions will not be recognized as parking extensions. When a call is
blind transferred to an extension that is not recognized as a parking
extension, the normal blind transfer code causes the transferred channel
to start executing dialplan. Calls that get parked in this manner do not
know the original channel name that parked the call so the original parker
could never be called back if the parked call is not retrieved before the
timeout time. The parking space is also announced to the call being
parked as a side effect of not knowing the original parking channel.
* Fix handling of BLINDTRANSFER channel variable for call parking.
* Fixed SIP blind transfer using the wrong dialplan context variable to
check for the parking extension.
Mark Michelson [Thu, 23 Feb 2012 15:49:13 +0000 (15:49 +0000)]
Fix ACK routing for non-2xx responses.
When we send an ACK for a 2xx response to an INVITE, we are supposed
to use the learned route set. However, when we receive a non-2xx final
response to an INVITE, we are supposed to send the ACK to the same place
we initially sent the INVITE.
We had been doing this up until the changes went in that would build a route
set from provisional responses. That introduced a regression where we would
use the learned route set under all circumstances.
With this change, we now will set the destination of our ACK based on the
invitestate. If it is INV_COMPLETED then that means that we have received
a non-2xx final response (INV_TERMINATED indicates a 2xx response was received).
If it is INV_CANCELLED, then that means the call is being canceled, which
means that we should be ACKing a 487 response.
The other change introduced here is setting the invitestate to INV_CONFIRMED
when we send an ACK *after* the reqprep instead of before. This way, we can
tell in reqprep more easily what the invitestate is prior to sending the ACK.
(closes issue ASTERISK-19389)
reported by Karsten Wemheuer
patches:
ASTERISK-19389v2.patch uploaded by Mark Michelson (license #5049)
(with some slight modifications prior to commit)
........
Merged revisions 356475 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 356476 from http://svn.asterisk.org/svn/asterisk/branches/10
Terry Wilson [Wed, 22 Feb 2012 21:22:43 +0000 (21:22 +0000)]
Track module use count for res_calendar
If the res_calendar module was followed immediately by one of the
calendar tech modules and "core stop gracefully" was run, Asterisk
would crash.
This patch adds use count tracking for res_calendar so that it is
unloaded after the tech modules when shutting down gracefully. It
is now not possible to unload all the of the calendar modules via
"module unload res_calednar.so", but it is still possible to unload
them all via "module unload -h res_calendar.so".
Fix potential buffer overrun and memory leak when executing "sip show peers"
The "sip show peers" command uses a fix sized array to sort the current peers
in the peers ao2_container. The size of the array is based on the current
number of peers in the container. However, once the size of the array is
determined, the number of peers in the container can change, as the peers
container is not locked. This could cause a buffer overrun when populating
the array, if peers were added to the container after the array was created.
Additionally, a memory leak of the allocated array would occur if a user
caused the _show_peers method to return CLI_SHOWUSAGE.
We now create a snapshot of the current peers using an ao2_callback with the
OBJ_MULTIPLE flag. This size of the array is set to the number of peers
that the iterator will iterate over; hence, if peers are added or removed
from the peers container it will not affect the execution of the "sip show
peers" command.
Review: https://reviewboard.asterisk.org/r/1738/
(closes issue ASTERISK-19231)
(closes issue ASTERISK-19361)
Reported by: Thomas Arimont, Jamuel Starkey
Tested by: Thomas Arimont, Jamuel Starkey
Patches: sip_show_peers_2012_02_16.diff uploaded by mjordan (license 6283)
........
................
Sean Bright [Mon, 20 Feb 2012 18:40:11 +0000 (18:40 +0000)]
Remove spurious warning when 'qualifyfreqnotok' is set successfully.
(closes issue ASTERISK-17176)
Reported by: John Covert
Tested by: Sean Bright
Patches:
chan_iax2.c.qualifyfreqnotok.patch uploaded by John Covert (license 5512)
........
Merged revisions 355997 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 355998 from http://svn.asterisk.org/svn/asterisk/branches/10
Alec L Davis [Sat, 18 Feb 2012 08:02:08 +0000 (08:02 +0000)]
push 'outgoing' flag from sig_XXX up to chan_dahdi
'p->outgoing' in chan_dahdi and sig_analog wern't kept in sync, particulary FXS ast_hangup didn't clear the 'outgoing' flag.
sig_pri and sig_ss7 were keeping 'outgoing' flag insync.
Now provides a callback for all the low level sig_XXX modules.
(issue ASTERISK-19316)
alecdavis (license 585)
Reported by: Jeremy Pepper
Tested by: alecdavis
Sean Bright [Fri, 17 Feb 2012 19:35:11 +0000 (19:35 +0000)]
Pass the correct value to ast_timer_set_rate() for IAX2 trunking.
IAX2 uses the trunkfreq variable to determine how often to send trunk packets, but
this value is in milliseconds while ast_timer_set_rate() expects the rate argument
to be ticks per second. So we divide 1000 by trunkfreq and pass that in instead.
With a default of 20ms, this change makes IAX2 send trunk packets every 20ms
instead of every 50ms.
Tracked down by myself and Bob Wienholt.
........
Merged revisions 355746 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 355747 from http://svn.asterisk.org/svn/asterisk/branches/10
Mark Michelson [Fri, 17 Feb 2012 19:22:22 +0000 (19:22 +0000)]
Fix regressions with regards to route-set creation on early dialogs.
This fixes two main issues:
1. Asterisk would send a CANCEL to the route created by the provisional response
instead of using the same destination it did in the initial INVITE.
2. If a new route set arrives in a 200 OK than was in the 1XX response (perfectly
possible if our outbound INVITE gets forked), then the route set in the 200 OK
needs to overwrite the route set in the 1XX response.
(closes issue ASTERISK-19358)
Reported by: Karsten Wemheuer
Tested by: Karsten Wemheuer
patches:
ASTERISK-19358.patch uploaded by Mark Michelson (license 5049)
ASTERISK-19358.patch uploaded by Stefan Schmidt (license 6034)
Sean Bright [Thu, 16 Feb 2012 20:03:40 +0000 (20:03 +0000)]
Revert a change to audio_audiohook_write_list that had no affect.
When I made this change initially, I was under the false impression that the
audiohooks structure remained on the channel after all of the hooks had been
detached. This is not the case, ast ast_read takes care of removing the
audiohooks structure if the lists are empty.
........
Merged revisions 355622 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 355623 from http://svn.asterisk.org/svn/asterisk/branches/10
Richard Mudgett [Thu, 16 Feb 2012 19:51:15 +0000 (19:51 +0000)]
Fix compile problem when old version of libvorbisfile v1.1.2 is used.
The principle difference between libvorbisfile v1.1.2 and newer (at least
v1.2.0) is the addition of the predefined callbacks OV_CALLBACKS_xxx in
vorbis/vorbisfile.h used for ov_open_callbacks().
* Updated the configure script to detect if libvorbisfile.h declares
OV_CALLBACKS_NOCLOSE.
* Copied the declaration of OV_CALLBACKS_NOCLOSE from v1.2.0 to allow
v1.1.2 to compile.
(closes issue ASTERISK-19370)
Reported by: Jonn Taylor
........
Merged revisions 355608 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 355620 from http://svn.asterisk.org/svn/asterisk/branches/10
Sean Bright [Wed, 15 Feb 2012 17:26:30 +0000 (17:26 +0000)]
Use TRUNK_CALL_START as originally intended.
Back in r646, TRUNK_CALL_START was added and defined as 0x4000. That same value
was also hard-coded in one part of the IAX2 code instead of using the #define.
TRUNK_CALL_START has changed over the years (for dealing with LOW_MEMORY), but
the hard-coded usage was never updated to match. This patch fixes that.
........
Merged revisions 355448 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 355449 from http://svn.asterisk.org/svn/asterisk/branches/10
Tilghman Lesher [Tue, 14 Feb 2012 20:27:16 +0000 (20:27 +0000)]
Re-commit the verbose branch.
This change permits each verbose destination (consoles, logger) to have its
own concept of what the verbosity level is. The big feature here is that
the logger will now be able to capture a particular verbosity level without
condemning each console to need to suffer that level of verbosity.
Additionally, a stray 'core set verbose' will no longer change what will go
to the log.
Sean Bright [Tue, 14 Feb 2012 13:35:02 +0000 (13:35 +0000)]
Clear the high order bit from the destination call number before sending.
send_apathetic_reply takes the incoming frame's source call number as the
destination call number for the outgoing frame. If the incoming frame was a
full frame, then the high order bit of the source call number is set and will be
interpreted as a retransmit when sent back out as the destination call number.
........
Merged revisions 355182 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 355183 from http://svn.asterisk.org/svn/asterisk/branches/10
Russell Bryant [Tue, 14 Feb 2012 00:43:50 +0000 (00:43 +0000)]
res_agi: Add AGIEXITONHANGUP variable.
This patch adds a variable AGIEXITONHANGUP for res_agi. If this variable is
set to "yes" on a channel, AGI() will exit immediately once a channel hangup
has been detected. This was the behavior of AGI() in Asterisk 1.4 and earlier
and is still desired by some people.
Since the dir timestamp is available at one second resolution, we cannot
know if it was updated within the same second after we scanned it.
Therefore, we will force another scan if the dir was just modified.
* Changed to force another scan if the directory was just modified.
Richard Mudgett [Mon, 13 Feb 2012 17:25:41 +0000 (17:25 +0000)]
Fix reconnecting to pgsql database after connection loss.
There can only be one database connection in res_config_pgsql just like
res_config_sqlite. If the connection is lost, the connection may not get
reestablished to the same database if the res_pgsql.conf and
extconfig.conf files are inconsistent.
* Made only use the configured database from res_pgsql.conf.
* Fixed potential buffer overwrite of last[] in config_pgsql().
(closes issue ASTERISK-16982)
Reported by: german aracil boned
Jason Parker [Fri, 10 Feb 2012 22:44:12 +0000 (22:44 +0000)]
Fix a voicemail memory leak with heard/deleted messages.
open_mailbox() was changed quite a long time ago to allocate this memory.
close_mailbox() should have been changed to be responsible for freeing it.
........
Merged revisions 354889 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 354890 from http://svn.asterisk.org/svn/asterisk/branches/10
Terry Wilson [Thu, 9 Feb 2012 22:06:41 +0000 (22:06 +0000)]
Note that CDRs are immutable once a bridge is torn down
CDRs cannot be modified after a bridge is torn down, (e.g. after
Dial() returns) even though the CDR() function may be called. Since
modifying the CDR code to change this behavior could very easily
break all kinds of things, this patch just documents this limitation.
Kinsey Moore [Thu, 9 Feb 2012 20:52:13 +0000 (20:52 +0000)]
Fix parsing of SIP headers where compact and non-compact headers are mixed
Change parsing of SIP headers so that compactness of the header no longer
influences which header will be chosen. Previously, a non-compact header
would be chosen instead of a preceeding compact-form header.
Kinsey Moore [Thu, 9 Feb 2012 19:54:37 +0000 (19:54 +0000)]
Make the config parser remove escaping backslashes
The config parser in Asterisk does not currently remove a backslash that is
used to escape a semicolon which would otherwise be interpreted as the start
of a comment.
The change here causes that backslash to be removed, but does not create a
real escape system in the config parser. The biggest complication with a real
escape system would be breaking existing configs everywhere (parsing \\ as \
and breaking on escaped non-semicolon characters) even though it would be the
"right" way to do things.
Terry Wilson [Thu, 9 Feb 2012 18:14:39 +0000 (18:14 +0000)]
Add auto_force_rport and auto_comedia NAT options
This patch adds the auto_force_rport and auto_comedia NAT options. It
also converts the nat= setting to a list of comma-separated combinable
options: no, force_rport, comedia, auto_force_rport, and auto_comedia.
nat=yes remains as an undocumented option equal to
"force_rport,comedia". The first instance of 'yes' or 'no' in the list
stops parsing and overrides any previously set options. If an auto_*
option is specified with its non-auto_ counterpart, the auto setting
takes precedence.
This patch builds upon the patch posted to ASTERISK-17860 by JIRA user
pedro-garcia.
Matthew Jordan [Thu, 9 Feb 2012 16:37:01 +0000 (16:37 +0000)]
Fix SIP INFO DTMF handling for non-numeric codes
In ASTERISK-18924, SIP INFO DTMF handlingw as changed to account for both
lowercase alphatbetic DTMF events, as well as uppercase alphabetic DTMF
events. When this occurred, the comparison of the character buffer containing
the event code was changed such that the buffer was first compared again '0'
and '9' to determine if it was numeric. Unfortunately, since the first
character in the buffer will typically be '1' in the case of non-numeric
event codes (10-16), this caused those codes to be converted to a DTMF event
of '1'. This patch fixes that, and cleans up handling of both
application/dtmf-relay and application/dtmf content types.
Russell Bryant [Thu, 9 Feb 2012 02:28:18 +0000 (02:28 +0000)]
Remove some unnecessary locking from ast_hangup().
This patch removes some unnecessary locking of the channels container in
ast_hangup(). The reason this came up is that this lock can very quickly block
the entire system. If any of the channel cleanup code decides to block, it
causes a problem for the whole system. For example, when audiohooks get
destroyed, if that blocks for a while waiting on the mixmonitor thread to exit
because it's busy blocking on some I/O, it causes a problem for many other
threads in the meantime.
This patch is based on the one by David Vossel, developer extrodinaire, at
https://reviewboard.asterisk.org/r/344/. If multiple peers are defined with the
same host/port, but differing callbackextensions, it chooses the peer with the
matching callbackextension. Since callbackextension creates an outbound
registration with the callbackextension as the Contact address, matching an
incoming request by that (in addition to the host/port) makes a lot of sense.
This patch also adds support for callbackextension to realtime by querying all
peers with callbackextensions on reload and adding registrations for them.