Add the attribute "type" to each "<use>" for menuselect.
This matters only when autoconf fails to detect that weak linking is supported.
External optional dependencies will become optional in both cases, as they are
removed at compile time when not detected. However, runtime-optional modules
are made mandatory when weak linking is not found. This change affects only
the external optional dependencies; previously, they were incorrectly required
when weak linking support was not detected.
Patches:
20110702__issue18062__asterisk_trunk.diff.txt by tilghman (License #5003)
Matthew Jordan [Tue, 5 Jul 2011 13:23:57 +0000 (13:23 +0000)]
Updated filestream destructor to block until move is complete when cache is used
When a cache directory is used, the process is forked and a mv command is executed to move the temporary file to the permanent location. This caused issues with voicemail, where a race condition occurred when the parent expected the file to be in the permanent location prior to the mv command completing. The parent process is now blocked until the mv command completes.
(closes issue ASTERISK-17724)
Reported by: Adiren P.
Tested by: mjordan
Richard Mudgett [Fri, 1 Jul 2011 21:07:22 +0000 (21:07 +0000)]
Better way to get chan and pvt lock for issue ASTERISK-17431.
Redoes -r308945 for issue ASTERISK-17431 deadlock fix for
sip_set_udptl_peer() and sip_set_rtp_peer().
* Lock the channels in the defined order and avoid the need for a deadlock
avoidance loop.
* Lock the channel before getting the pointer to the private structure to
be sure that the pointer will not change due to a masquerade or channel
hangup.
* To preserve sanity, check that chan and p->owner are the same. (Pointer
rearangements should not happen without the protection of locks because
bad things tend to happen otherwise.)
Kinsey Moore [Wed, 29 Jun 2011 21:49:21 +0000 (21:49 +0000)]
chan_sip: cleanup from the introduction of ast_str
Remove the length field from sip_req and sip_pkt in chan_sip since they are
redundant (ast_str holds its own length) and refactor the necessary functions.
Richard Mudgett [Wed, 29 Jun 2011 18:05:15 +0000 (18:05 +0000)]
Response to QueueRule manager command does not contain ActionID if it was specified.
* Add ActionID support as documented for the QueueRule AMI action.
* Remove documentation for ActionID with the Queues AMI action. The
output does not follow normal AMI response output and there is no place to
put an ActionID header.
Richard Mudgett [Mon, 27 Jun 2011 15:37:19 +0000 (15:37 +0000)]
When subscribing MWI to an unsolicited mailbox the first notification is incorrect.
A remote peer subscribed to MWI with the unsolicited option and a local
phone subscribed to the remote mailbox. The notify message-summary events
are sent correctly except for the first one when subscribing, which will
always be 0. This means the phone MWI indicator will be wrong until the
mailbox read/unread count changes and the event is fired.
Looks like this is a regression from ASTERISK-16149.
* Fix the logic to check the cache and if allowed then fallback to
manually counting mailbox messages.
Richard Mudgett [Fri, 24 Jun 2011 20:46:01 +0000 (20:46 +0000)]
Syntax errors in dialplan do not display the file name.
When issuing the CLI command "dialplan reload" syntax errors and warnings
are displayed on the console. The offending line number is displayed on
the console, but the file name is not displayed. Errors caught in
main/config.c do display the file name.
(closes issue ASTERISK-17985)
Reported by: ulogic
Patches:
pbx_config.patch uploaded by ulogic (License #5685) modified format
Tested by: rmudgett
Jonathan Rose [Fri, 24 Jun 2011 16:48:06 +0000 (16:48 +0000)]
DTMF wasn't being logged on connected consoles when enabled in logger.conf
Previously in order for DTMF to be logged in a connected console session, the user would
have to do logger set channel DTMF on. This corrects that so that it is on by default.
This issue was caused by an off by one error incurred by a logger level count of 6 in
logger.h where it should have been 7.
(closes issue: ASTERISK-17974)
Reported by: Luke H
Terry Wilson [Wed, 22 Jun 2011 18:52:04 +0000 (18:52 +0000)]
Stop sending IPv6 link-local scope-ids in SIP messages
The idea behind the patch listed below was used, but in a more targeted manner.
There are now address stringification functions for addresses that are meant to
be sent to a remote party. Link-local scope-ids only make sense on the machine
from which they originate and so are stripped in the new functions.
There is also a host sanitization function added to chan_sip which is used
for when peer and dialog tohost fields or sip_registry hostnames are used to
craft a SIP message.
Also added are some basic unit tests for netsock2 address parsing.
Richard Mudgett [Wed, 22 Jun 2011 18:41:20 +0000 (18:41 +0000)]
Timout or error on INFO or MESSAGE transaction causes call to be lost.
When exchanging INFO messages within a call, 4xx error causes the call to
be disconnected although RFC 2976 explicitly states that such transactions
do not modify the state of the dialog.
When exchanging MESSAGE messages within a call, 4xx error causes the call
to be disconnected. To provide least surprise, we should not disconnect
the call since a MESSAGE is like INFO in this case. (Implied by RFC 3428
Section 2)
David Vossel [Tue, 21 Jun 2011 20:11:52 +0000 (20:11 +0000)]
Fixes locking inversion issue in ast_async_goto()
During this function we can not hold the "chan" lock while
doing the masquerade, the explicit goto on the tmp chan, or
the channel alloc. Instead we need to get the channel lock,
store off information about the channel that we need, and
then let the channel lock go for the remainder of the function.
Kinsey Moore [Tue, 21 Jun 2011 16:09:14 +0000 (16:09 +0000)]
ConfBridge does not handle hangup properly
When playing back a prompt to a channel, confbridge neglects to check for
hangup events causing lockup condititions for hangups that occur before
actually joining the conference. This change ensures that the user is removed
from the conference in the event of a premature hangup.
Terry Wilson [Thu, 16 Jun 2011 22:35:41 +0000 (22:35 +0000)]
Lock the channel before calling the setoption callback
The channel needs to be locked before calling these callback functions. Also,
sip_setoption needs to lock the pvt and a check p->rtp is non-null before using
it.
DYNAMIC_FEATURES were broken by a recent DTMF change. This patch makes
sure that dynamic features are also checked when deciding whether or not
to pass DTMF through or store it for interpreting.
Jonathan Rose [Wed, 15 Jun 2011 17:42:42 +0000 (17:42 +0000)]
Adds locking to find_table in res_configure_pgsql to prevent a crash.
Bryonclark described the problem as occuring during this function because of multiple
simultaneous database operations causing corruption against a pgsqlConn object.
Richard Mudgett [Wed, 15 Jun 2011 16:43:18 +0000 (16:43 +0000)]
[regression] Voicemail MWI is no longer sent.
When leaving a voicemail, the MWI message is never sent. The same thing
happens when checking a voicemail and marking it as read.
If you restart Asterisk, everything comes up at that state correctly, but
changes to the messages in voicemail causes the light to not be set
appropriately. Very easy to reproduce.
* Made ast_event_check_subscriber() return TRUE if there are ANY
subscribers to an event type when there are no restricting ie values
passed. This allows an event being queued to be queued.
Resolve a segfault/bus error when we try to map memory that falls on a page
boundary.
The fix for ASTERISK-15359 was incorrect in that it added 1 to the length of the
mmap'd region. The problem with this is that reading/writing to that extra byte
outside of the bounds of the underlying fd causes a bus error.
The real issue is that we are working with both a FILE * and the raw fd
underneath it and not synchronizing between them. The code that was removed in
ASTERISK-15359 was correct, but we weren't flushing the FILE * before mapping
the fd.
Looking at the manager code in 1.4 reveals that the FILE * in 'struct
mansession' is never used except to create a temporary file that we immediately
fdopen. This means we just need to write a 0 byte to the fd and everything will
just work. The other branches require a call to fflush() which, while not a
guaranteed fix, should reduce the likelihood of a crash.
This all makes sense in my head.
(closes issue ASTERISK-16460)
Reported by: Ravelomanantsoa Hoby (hoby)
Patches:
issue17747_1.4_svn_markII.patch uploaded by Sean Bright (license #5060)
........
................
Jonathan Rose [Tue, 14 Jun 2011 16:38:43 +0000 (16:38 +0000)]
Changes contact use in build_peer to use the FORCE_RPORT flag instead of RPORT_PRESENT
It turned out that this was causing NAT=Yes to always use rport when present which was
against 1.6.2 behavior and the check itself was redundant since the only way this
segment of code could be reached was if RPORT_PRESENT was already evaluated as true
earlier.
Leif Madsen [Mon, 13 Jun 2011 20:22:21 +0000 (20:22 +0000)]
Additional documentation for bindaddr.
Note that bindaddr will only enable UDP instead of both UDP and TCP which is
what I would expect for backwards compatibility with systems being upgraded
which only support UDP transportation.
(closes issue ASTERISK-17976)
Reported by: Sean Darcy
Terry Wilson [Fri, 10 Jun 2011 15:29:00 +0000 (15:29 +0000)]
Avoid a DB1 infinite loop bug
Explicity check the last entry in the DB and make sure that we don't iterate
past it. Since there can be no duplicates, this just makes sure that we stop
after matching the last key.
This patch also refactors the code to get away from some code duplication. A
previous patch added many astdb tests and this patch passed them.
Richard Mudgett [Thu, 9 Jun 2011 16:31:53 +0000 (16:31 +0000)]
Remove potential deadlock in call pickup race.
Deadlock is possible in ast_do_pickup() when holding the target channel
lock and trying to get the chan channel lock. Also, holding the target
lock when calling ast_channel_masquerade() is not a good idea because that
routine does deadlock avoidance.
* Removed the need to hold the target lock after marking the target with a
datastore and getting the connected line data off of the target channel.
* Moved can_pickup() to ast_can_pickup() in features.c. Now all the call
pickup methods use the same basic call pickup availability check.
Jonathan Rose [Thu, 9 Jun 2011 14:06:42 +0000 (14:06 +0000)]
Adds ast_escape_encoded utility to properly handle escaping of quoted field before uri.
This commit backports a feature in trunk affecting initreqprep so that display name won't
be encoded improperly. Also includes unit tests for the ast_escape_quoted function.
This patch gives 1.8 a much improved outlook in countries which don't use standard
ASCII characters.
Richard Mudgett [Wed, 8 Jun 2011 20:46:55 +0000 (20:46 +0000)]
Ring all queue with more than 255 agents will cause crash.
1. Create a ring-all queue with 500 permanent agents.
2. Call it.
3. Asterisk will crash.
The watchers array in app_queue.c has a hard limit of 255. Bounds
checking is not done on this array. No sane person should put 255 people
in a ring-all queue, but we should not crash anyway.
Gregory Nietsky [Wed, 8 Jun 2011 06:18:38 +0000 (06:18 +0000)]
Make handle_request_publish do dialog expiration and destruction.
This patch fixes handle_request_publish so that it does dialog expiration and destruction.
Without this patch the incoming PUBLISH requests will get stuck in the dialog list.
Restarting asterisk is the only way to remove them.
Personal observation on one system the server hung up while looping through the channels
rendering asterisk unusable and all sip phones unregisterd when they try reregister
more requests are added.
Richard Mudgett [Fri, 3 Jun 2011 22:09:36 +0000 (22:09 +0000)]
Asterisk crash when unloading cdr_radius/cel_radius.
The rc_openlog() API call is passed a string that is used by openlog() to
format log messages. The openlog() does not copy the string it just keeps
a pointer to it. When the module is unloaded, the string is gone from
memory. Depending upon module load order and if the other module then has
an error, a crash happens.
* Pass rc_openlog() a strdup'd string with the understanding that there
will be a small memory leak if the cdr_radius/cel_radius modules are
unloaded.
* Call rc_destroy() to free the rc handle memory when the module is
unloaded.
Richard Mudgett [Fri, 3 Jun 2011 20:58:13 +0000 (20:58 +0000)]
Event subscription fixes.
Must commit the subscription fixes together with the integration
subscription tests. The subscription fixes cause an erroneously passing
test to fail. The new subscription tests detect errors without the
subscription fixes.
* Added missing event_names[] table entry.
* Reworked ast_event_check_subscriber()/match_sub_ie_val_to_event() to
correctly detect if a subscriber exists for the proposed event.
* Made match_ie_val() and match_sub_ie_val_to_event() check the buffer
length for RAW payload types.
* Fixed error handling memory leak in ast_event_sub_activate(),
ast_event_unsubscribe(), and ast_event_queue().
* Made ast_event_new() and ast_event_check_subscriber() better protect
themselves from an invalid payload type.
* Added container lock protection between removing old cache events and
adding the new cached event in
ast_event_queue_and_cache()/event_update_cache().
Alexandr Anikin [Wed, 1 Jun 2011 10:40:19 +0000 (10:40 +0000)]
Fix double alerting, add forced alerting before answer
Fix double alerting (it wasn't fixed here by issue #18542)
Add forced alerting before connect (if it wasn't before)
Try to send all packets from outgoing queue rather than one only
Call goes into clearing state when disconnect command is received
David Vossel [Tue, 31 May 2011 18:52:54 +0000 (18:52 +0000)]
Chan_local locking cleanup.
This patch removes all of the unnecessary deadlock
avoidance loops that occur in chan_local. It also
resolves an issue with a deadlock triggered by
local channel optimizations.
Richard Mudgett [Fri, 27 May 2011 23:45:41 +0000 (23:45 +0000)]
Crash when using hagi and no servers are available.
When none of the servers returned by the SRV querey respond, asterisk
crashes. The problem is that if the loop over all the SRV entries
finishes then the srv_context has already been cleaned up.
* Make ast_srv_cleanup() check to see if the context is already cleaned
up.
Alec L Davis [Fri, 27 May 2011 08:31:15 +0000 (08:31 +0000)]
Fix *8 directed pickup locks system during pickupsound play out
move playout from sip_pickup_thread to bridge using BRIDGE_PLAY_SOUND method,
This stop the clash of 2 threads trying to write audio to same channel.
In addition fixes choppy audio beep in issue 19177.
Mark Murawki [Thu, 26 May 2011 21:48:45 +0000 (21:48 +0000)]
Fixed build problem with dev mode enabled, which was caused by commit 321100. Reformulated patch to be more generic.
Moved the sip uri parse variable initalization to parse_uri_full in reqresp_parser.c. This will ensure that any use of parse uri will have null output variables if the parse fails.
Mark Murawki [Thu, 26 May 2011 20:09:35 +0000 (20:09 +0000)]
ast_sockaddr_resolve() in netsock2.c may deref a null pointer
Added a null check in netsock2 ast_sockaddr_resolve() as well as added default initalizers in chan_sip parse_uri_legacy_check() to make sure that invalid uris will make null (and not undefined) user,pass,domain,transport variables