Avoid reinvite race situations with two Asterisks trying
to reinvite each other in 1.4 and trunk.
This patch implements support for the 491 error code that
Asterisk 1.4 generates on situations where we get an
incoming INVITE and already has one in progress.
Thanks to mavetju for reporting and to Raj Jain for an
excellent explanation of the problem.
Patch by myself. Tested with 8 Asterisk servers connected
to each other in a training network.
Luigi Rizzo [Mon, 10 Dec 2007 08:40:59 +0000 (08:40 +0000)]
remove relative paths and use ASTTOPDIR instead.
Give a default value to ASTTOPDIR if unset so we can at least
do a 'make clean' without too much trouble.
The proper fix, however, is to partition the top level
Makefile in a 'setup' and a 'main' part, in a way that the
'setup' part can be included from subdirs' Makefiles and
allow targets to be built without going through the
top level Makefile.
Luigi Rizzo [Mon, 10 Dec 2007 03:50:38 +0000 (03:50 +0000)]
Put into Makefile.moddir_rules the common instructions used to
generate loadable and embedded module lists.
Individual Makefiles now are a lot simpler, possibly as simple as this:
-include $(ASTTOPDIR)/menuselect.makeopts $(ASTTOPDIR)/menuselect.makedeps
MODULE_PREFIX=cdr_
all: _all
include $(ASTTOPDIR)/Makefile.moddir_rules
and also more flexible because in a single directory we can combine
various types of modules (app_, cdr_, func_, ... ) by simply
listing them in the MODULE_PREFIX variable.
The individual Makefiles can also create list of modules to be
excluded by listing them in the variablel MODULE_EXCLUDE (see an
example in channels/Makefile).
With this change it becomes trivial to integrate a directory with
locally created/modified sources into the main build.
Luigi Rizzo [Sun, 9 Dec 2007 16:47:25 +0000 (16:47 +0000)]
Implement the outcome of a discussion on the -dev list re. the use
of DESTDIR and INSTALL_PATH - many thanks to Tzafrir Cohen and
Simon Perreault for extremely useful feedback:
1. comment out the [directories] section the created asterisk.conf ;
you can set the correct defaults at build time using INSTALL_PATH,
so the repetition here is redundant and often wrong.
(The next step now is move asterisk.conf outside the Makefile to
asterisk.conf.sample, because there is little if anything here
that needs to be constructed at build/install time).
2. use DESTDIR?=$(INSTALL_PATH) so you only need to specify a path
once if the two coincide. This should have no ill side effects,
because if you don't specify DESTDIR, you really need
INSTALL_PATH="" to set the correct defaults, and if you specify
DESTDIR the value is not overridden.
The second part required moving the 'export DESTDIR' right after
the assignment to prevent DESTDIR getting set by the export
(this is documented in the Makefile).o hopefully avoid the mistake)$
With this change you can now do something like this from your source tree:
make INSTALL_PATH=/some/place install samples
and then
main/asterisk -vdc
which will pick up the correct config files and libraries from
/some/place - i.e. great for developers!
Russell Bryant [Fri, 7 Dec 2007 21:25:03 +0000 (21:25 +0000)]
Merged revisions 91830 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r91830 | russell | 2007-12-07 15:24:33 -0600 (Fri, 07 Dec 2007) | 5 lines
Make the lock protecting each thread's list of locks it currently holds
recursive. I think that this will fix the situation where some people have
said that "core show locks" locks up the CLI.
(related to issue #11080)
Russell Bryant [Fri, 7 Dec 2007 21:17:52 +0000 (21:17 +0000)]
Merged revisions 91828 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r91828 | russell | 2007-12-07 15:17:24 -0600 (Fri, 07 Dec 2007) | 6 lines
Fix another bug in the DEBUG_THREADS code. The ast_mutex_init() function had
the mutex attribute object marked as static. This means that multiple threads
initializing locks at the same time could step on each other and end up with
improperly initialized locks.
(found when tracking down locking issues related to issue #11080)
Russell Bryant [Fri, 7 Dec 2007 21:11:44 +0000 (21:11 +0000)]
Merged revisions 91826 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r91826 | russell | 2007-12-07 15:11:08 -0600 (Fri, 07 Dec 2007) | 6 lines
I love fixing lock related errors in the lock debugging code. That's about as
ironic as it gets in Asterisk programming land. Anyway, I spotted this bug while
trying to track down why systems are locking up and acting weird in issue #11080.
The mutex attribute object was marked as static in this function when it should
not have been.
Russell Bryant [Fri, 7 Dec 2007 16:40:41 +0000 (16:40 +0000)]
Merged revisions 91783 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r91783 | russell | 2007-12-07 10:38:48 -0600 (Fri, 07 Dec 2007) | 6 lines
* Add channel locking around datastore operations that expect the channel
to be locked.
* Document why we don't record Local channels in the dialed interfaces list.
* Remove the dialed variable as it isn't needed.
* Restructure some code for clarity and coding guidelines stuff
Russell Bryant [Fri, 7 Dec 2007 16:28:36 +0000 (16:28 +0000)]
Merged revisions 91780 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r91780 | russell | 2007-12-07 10:25:25 -0600 (Fri, 07 Dec 2007) | 7 lines
* Add channel locking around datastore operations that expect the channel
to be locked.
* Document why we don't record Local channels in the dialed interfaces list.
* Handle memory allocation failure.
* Remove the dialed variable, as it wasn't actually needed.
* Tweak some formatting to conform to coding guidelines.
Russell Bryant [Fri, 7 Dec 2007 16:11:00 +0000 (16:11 +0000)]
Merged revisions 91777 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r91777 | russell | 2007-12-07 10:08:35 -0600 (Fri, 07 Dec 2007) | 6 lines
* Add a bit more of a verbose comment as to why a hangup frame needs to be
queued up if autoservice gets a NULL return from ast_read().
* Make the process of queueing the hangup frame more efficient by putting the
frame where it is going to end up and avoiding some locking and extra memory
allocations and freeing.
Hangups that happen during autoservice were not processed appropriately. This is
because a hangup actually causes a NULL frame to be received, not a hangup frame.
Queueing a hangup if we receive a NULL frame during autoservice corrects this problem
(closes issue #11467, reported by jmls, patched by me)
Russell Bryant [Fri, 7 Dec 2007 02:43:21 +0000 (02:43 +0000)]
Merged revisions 91677 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r91677 | russell | 2007-12-06 20:38:40 -0600 (Thu, 06 Dec 2007) | 4 lines
Allow dialing local channels from Queue() and Dial() again. There was a slight
flaw in the code to prevent call forwards from looping that caused this problem.
(related to issue #11486)
Russell Bryant [Fri, 7 Dec 2007 02:21:07 +0000 (02:21 +0000)]
Merged revisions 91675 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r91675 | russell | 2007-12-06 20:19:45 -0600 (Thu, 06 Dec 2007) | 7 lines
Fix in an issue in the call forwarding handling code that was causing crashes
on every call into a queue. I'm not entirely sure about the logic in this part
of the code, so I want to look at it some more tomorrow. However, this makes
it safe and keeps it from crashing.
(closes issue #11486, reported by adamg, patched by me)
At the end of a call, when we're reporting, RTCP may already be partially torn down, so check for NULL dereference
Reported by: blitzrage
Patch by: tilghman
(Closes issue #11450)
Russell Bryant [Thu, 6 Dec 2007 19:12:54 +0000 (19:12 +0000)]
Blocked revisions 91501 via svnmerge
........
r91501 | russell | 2007-12-06 13:11:35 -0600 (Thu, 06 Dec 2007) | 5 lines
Add a new module flag to indicate that a build sum is present. Modules built
against older Asterisk 1.4 headers will now load properly with just a warning
indicating that they are old and may cause problems.
(patch by paravoid)
Fix various in the udptl implementation. It could return empty modem frames, have an incorrect sequence number on packets, and display the wrong sequence number in the debug messages.
(closes issue #11228)
Reported by: Cache
Patches:
udptl-4.patch uploaded by dimas (license 88)
Olle Johansson [Thu, 6 Dec 2007 15:29:05 +0000 (15:29 +0000)]
Changes to manager events in channel.c
- Newstate event
- Now has "CalleridNum" for numeric caller id, like Newchannel
- The event does not send "<unknown>" for unknown caller IDs just an empty field
- Newstate and Newchannel events
- these have changed headers
"State" -> ChannelStateDesc Text based channel state
-> ChannelState Numeric channel state
- The events does not send "<unknown>" for unknown caller IDs just an empty field
- Newstate event
- Now has "CalleridNum" for numeric caller id, like Newchannel
- The event does not send "<unknown>" for unknown caller IDs just an empty field
- Link and Unlink events
- The "Link" and "Unlink" bridge events in channel.c are now renamed to "Bridge"
- The link state is in the bridgestate: header as "Link" or "Unlink"
- For channel.c bridges, "Bridgetype: core" is added. This opens up for
bridge events in rtp.c and channel drivers
- The "Rename" manager event has a renamed header, to use the same
terminology for the current channel as other events
- Oldname -> Channel
Olle Johansson [Thu, 6 Dec 2007 15:12:18 +0000 (15:12 +0000)]
New manager event when a channel changes account code.
Maybe belongs in the new cdr category?
---moremanager---
Event: NewAccountCode
Modules: cdr.c
Purpose: To report a change in account code for a live channel
Example:
Event: NewAccountCode
Privilege: call,all
Channel: SIP/olle-01844600
Uniqueid: 1177530895.2
AccountCode: Stinas account 1234848484
OldAccountCode: Olles Account 12345
Olle Johansson [Thu, 6 Dec 2007 15:04:34 +0000 (15:04 +0000)]
- Dial event
- Event Dial has new headers, to comply with other events
- Source -> Channel Channel name (caller)
- SrcUniqueID -> UniqueID Uniqueid
(new) -> Dialstring Dialstring in app data
Olle Johansson [Thu, 6 Dec 2007 14:33:14 +0000 (14:33 +0000)]
Update ZapShowChannels so that you can specify one channel.
Action ZapShowChannels
Header changes
- Channel: -> ZapChannel
For active channels, the Channel: and Uniqueid: headers are added
You can now add a "ZapChannel: " argument to zapshowchannels actions
to only get information about one channel.
The 'G' option for Dial() did not properly handle the case where only a label was
provided. This was due to the fact that the answering channel did not have an extension
set, so ast_parseable_goto would fail. This fix eliminates the call to ast_parseable_goto
on the answering channel since it is a wasteful call. The answering channel and the calling
channel are both directed to the same extension and context, just different priorities, so
we can just copy the values from the calling channel to the answering channel and increment
the answering channel's priority.
(closes issue #11382, reported by jon, patch by me with correction by jon)
Joshua Colp [Wed, 5 Dec 2007 16:14:06 +0000 (16:14 +0000)]
Remove second prefix line. Only need it documented once in the same file.
(closes issue #11472)
Reported by: eserra
Patches:
http.conf.sample.diff uploaded by eserra (license 45)
Russell Bryant [Wed, 5 Dec 2007 01:59:32 +0000 (01:59 +0000)]
Merged revisions 91070 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r91070 | russell | 2007-12-04 18:35:31 -0600 (Tue, 04 Dec 2007) | 11 lines
Fix some crashes in chan_iax2 that were reported as happening on Mac systems.
It turns out that the problem was the Mac version of the ast_atomic_fetchadd_int()
function. The Mac atomic add function returns the _new_ value, while this function
is supposed to return the old value. So, the crashes happened on unreferencing
objects. If the reference count was decreased to 1, ao2_ref() thought that it
had been decreased to zero, and called the destructor. However, there was still
an outstanding reference around.
Russell Bryant [Wed, 5 Dec 2007 00:49:19 +0000 (00:49 +0000)]
Merged revisions 91074 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r91074 | russell | 2007-12-04 18:48:47 -0600 (Tue, 04 Dec 2007) | 4 lines
When DEBUG_THREADS is enabled, we only have the details about who is holding
a lock that we are waiting on for a mutex, not rwlocks. This should fix the
problem where people have reported "core show locks" crashing sometimes.
Russell Bryant [Tue, 4 Dec 2007 23:47:28 +0000 (23:47 +0000)]
Blocked revisions 91032 via svnmerge
........
r91032 | russell | 2007-12-04 17:46:40 -0600 (Tue, 04 Dec 2007) | 5 lines
Modify file.h to maintain API compatibility with earlier versions. If a recent
compiler is being used, then a warning will show up for any modules still using
the old name "private" instead of "_private".
(patch suggested by paravoid)
Russell Bryant [Tue, 4 Dec 2007 22:07:35 +0000 (22:07 +0000)]
Merged revisions 90967 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r90967 | russell | 2007-12-04 13:57:39 -0600 (Tue, 04 Dec 2007) | 7 lines
Make some changes to some additions I made recently for doing channel autoservice
when looking up extensions. This code was added to handle the case where a
dialplan switch was in use that could block for a long time. However, the way
that I added it, it did this for all extension lookups. However, lookups in the
in-memory tree of extensions should _not_ take long enough to matter. So, move
the autoservice stuff to be only around executing a switch.
Russell Bryant [Tue, 4 Dec 2007 19:08:30 +0000 (19:08 +0000)]
Add support for monitoring MWI on FXO lines.
This introduces two new options for zapata.conf: mwimonitor and mwimonitornotify.
The mwimonitor option enables MWI monitoring. When the MWI state on a line changes,
then the script specified by mwimonitornotify will be executed for custom handling
of the state change, similar to the externnotify option of voicemail.conf.
Also, when the MWI state on an FXO line changes, an internal Asterisk event is
generated to indicate the new state of the associated mailbox. That may, any
module that cares about MWI information will get notified and can handle it
just as if app_voicemail had sent this notification.
(BE-253, original patch from markster, with some minor modifications by me to
add comments, documentation, and internal event support)
Mark Michelson [Tue, 4 Dec 2007 18:29:35 +0000 (18:29 +0000)]
Kevin suggested doing the reverse of my last commit, since imap_retrieve_file
does not modify the contents of the "mailbox" string. In other words, I'm changing
the imap_retrieve_file function to take a const char* as the third argument so that I
don't need to cast const char*'s as char*'s to suppress compiler warnings.
This is the merge of the forward-loop branch. The main change here is that call-forwards can no longer loop.
This is accomplished by creating a datastore on the calling channel which has a linked list of all devices
dialed. If a forward happens, then the local channel which is created inherits the datastore. If, through this
progression of forwards and datastore inheritance, a device is attempted to be dialed a second time, it will simply
be skipped and a warning message will be printed to the CLI. After the dialing has been completed, the datastore
is detached from the channel and destroyed.
This change also introduces some side effects to the code which I shall enumerate here:
1. Datastore inheritance has been backported from trunk into 1.4
2. A large chunk of code has been removed from app_dial. This chunk is the section of code
which handles the call forward case after the channel has been requested but before it has
been called. This was removed because call-forwarding still works fine without it, it makes the
code less error-prone should it need changing, and it made this set of changes much less painful
to just have the forwarding handled in one place in each module.
3. Two new files, global_datastores.h and .c have been added. These are necessary since the datastore
which is attached to the channel may be created and attached in either app_dial or app_queue, so they
need a common place to find the datastore info. This approach was taken in case similar datastores are
needed in the future, there will be a common place to add them.