Matthew Jordan [Thu, 1 Aug 2013 20:55:17 +0000 (20:55 +0000)]
Support externally initiated parking requests; remove some dead code
This patch does the following:
* It adds support for externally initiated parking requests. In particular,
chan_skinny has a protocol level message that initiates a call park.
This patch now supports that option, as well as the protocol specific
mechanisms in chan_dahdi/sig_analog and chan_mgcp.
* A parking bridge features virtual table has been added that provides
access to the parking functionality that the Bridging API needs. This
includes requests to park an entire 'call' (with little or no additional
information, thank you chan_skinny), perform a blind transfer to a parking
extension, determine if an extension is a parking extension, as well as the
actual "do the parking" request from the Bridging API.
* Refactoring in chan_mgcp, chan_skinny, and chan_dahdi to make use of the new
functions
* The removal of some - but not all - dead parking code from features.c
This also fixed blind transferring a multi-party bridge to a parking lot (which
was implemented, but had at least one code path where using the parking features
kK might not have worked)
Review: https://reviewboard.asterisk.org/r/2710
(closes issue ASTERISK-22134)
Reported by: Matt Jordan
Matthew Jordan [Thu, 1 Aug 2013 19:11:46 +0000 (19:11 +0000)]
Add queue member paused hints
This patch adds the ability in Queue to raise a hint when a member's paused
state changes. The hint uses the form 'Queue:{queue_name}_pause_{member_name}',
where {queue_name} and {member_name} are the name of the queue and the name
of the member to subscribe to, respectively.
For example: exten => 8501,hint,Queue:sales_pause_mark.
Members will show as In Use when paused.
Note that the format of the queue pause hint was changed slightly from what
is on the issue to accomodate suggestion on the code review.
Review: https://reviewboard.asterisk.org/r/2254
(closes issue ASTERISK-20842)
Reported by: Philippe Lindheimer
patches:
qpause-10-378206.diff uploaded by Philippe Lindheimer (license 5519)
qpause-11-378206.diff uploaded by Philippe Lindheimer (license 5519)
qpause-trunk-378206.diff uploaded by Philippe Lindheimer (license 5519)
Kinsey Moore [Thu, 1 Aug 2013 17:07:52 +0000 (17:07 +0000)]
Fix documentation replication issues
This prevents XML documentation duplication by expanding channel and
bridge snapshot tags into channel and bridge snapshot parameter sets
with a given prefix or defaulting to no prefix. This also prevents
documentation from becoming fractured and out of date by keeping all
variations of the documentation in template form such that it only
needs to be updated once and keeps maintenance to a minimum.
David M. Lee [Thu, 1 Aug 2013 13:49:34 +0000 (13:49 +0000)]
Split caching out from the stasis_caching_topic.
In working with res_stasis, I discovered a significant limitation to
the current structure of stasis_caching_topics: you cannot subscribe
to cache updates for a single channel/bridge/endpoint/etc.
To address this, this patch splits the cache away from the
stasis_caching_topic, making it a first class object. The stasis_cache
object is shared amongst individual stasis_caching_topics that are
created per channel/endpoint/etc. These are still forwarded to global
whatever_all_cached topics, so their use from most of the code does
not change.
In making these changes, I noticed that we frequently used a similar
pattern for bridges, endpoints and channels:
This pattern was extracted as the 'Stasis Caching Pattern', defined in
stasis_caching_pattern.h. This avoids a lot of duplicate code between
the different domain objects.
Since the cache is now disassociated from its upstream caching topics,
this also necessitated a change to how the 'guaranteed' flag worked
for retrieving from a cache. The code for handling the caching
guarantee was extracted into a 'stasis_topic_wait' function, which
works for any stasis_topic.
Matthew Jordan [Thu, 1 Aug 2013 00:07:59 +0000 (00:07 +0000)]
Raise Registry AMI events on registration failures
This patch makes it so that all registration attempts that fail that
also permanently modify the registration state will raise an appropriate
AMI event.
Note that this patch was forward ported to trunk and the Stasis Core
message bus by mjordan.
Matthew Jordan [Wed, 31 Jul 2013 23:48:35 +0000 (23:48 +0000)]
Update CONTROL STREAM FILE to accept an 'offsetms' parameter
This patch allows starting playback of audio through the CONTROL STREAM FILE
AGI command to start at a particular offset. It will also return the final
position of the file in the 'endpos' attribute.
Mark Michelson [Tue, 30 Jul 2013 18:14:50 +0000 (18:14 +0000)]
The large GULP->PJSIP renaming effort.
The general gist is to have a clear boundary between old SIP stuff
and new SIP stuff by having the word "SIP" for old stuff and "PJSIP"
for new stuff. Here's a brief rundown of the changes:
* The word "Gulp" in dialstrings, functions, and CLI commands is now
"PJSIP"
* chan_gulp.c is now chan_pjsip.c
* Function names in chan_gulp.c that were "gulp_*" are now "chan_pjsip_*"
* All files that were "res_sip*" are now "res_pjsip*"
* The "res_sip" directory is now "res_pjsip"
* Files in the "res_pjsip" directory that began with "sip_*" are now "pjsip_*"
* The configuration file is now "pjsip.conf" instead of "res_sip.conf"
* The module info for all PJSIP-related files now uses "PJSIP" instead of "SIP"
* CLI and AMI commands created by Asterisk's PJSIP modules now have "pjsip" as
the starting word instead of "sip"
Matthew Jordan [Mon, 29 Jul 2013 15:57:44 +0000 (15:57 +0000)]
When performing a reload, reload the new features_config and not the old
Performing a module reload of core components causes specific functions
compiled into the Asterisk binary to be reloaded. The table of said functions
was still pointing to the old features reload mechanism, and not the new one.
Kinsey Moore [Mon, 29 Jul 2013 14:51:00 +0000 (14:51 +0000)]
Clean up and improve test_cel
Improve reliability of attended transfer merge and link tests.
Stop using ast_log(LOG_ERROR, ...); in favor of ast_test_status_update
Remove fred and eve channel helpers since they are not necessary
Kinsey Moore [Sat, 27 Jul 2013 23:11:02 +0000 (23:11 +0000)]
Rename everything Stasis-HTTP to ARI
This renames all files and API calls from several variants of
Stasis-HTTP to ARI including:
* Stasis-HTTP -> ARI
* STASIS_HTTP -> ARI
* stasis_http -> ari (ast_ari for global symbols, file names as well)
* stasis http -> ARI
Richard Mudgett [Fri, 26 Jul 2013 21:34:23 +0000 (21:34 +0000)]
Remove the unsafe bridge parameter from ast_bridge_hook_callback's.
Most hook callbacks did not need the bridge parameter. The pointer value
could become invalid if the channel is moved to another bridge while it is
executing.
* Fixed some issues in feature_attended_transfer() as a result.
* Reduce the bridge inhibit count in
attended_transfer_properties_shutdown() after it has restored the bridge
channel hooks.
* Removed basic bridge requirement on feature_blind_transfer(). It does
not require the basic bridge like feature_attended_transfer().
David M. Lee [Fri, 26 Jul 2013 17:42:08 +0000 (17:42 +0000)]
Fix /stasis/res/app_replaced unit test.
A typo in recent changes caused the JSON ApplicationReplaced message to
fail to build, so the message wasn't being sent out the WebSocket.
Related, the replaced application would also unregister itself when it
disconnected, which would actually unregister the new application. This
was also fixed.
Jonathan Rose [Fri, 26 Jul 2013 16:34:56 +0000 (16:34 +0000)]
Add name argument to BridgeWait() so multiple holding bridges may be used
Changes arguments for BridgeWait from BridgeWait(role, options) to
BridgeWait(bridge_name, role, options). Now multiple holding bridges may
be created and referenced by this application.
(closes issue ASTERISK-21922)
Reported by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/2642/
Fix crash due to trying to send a re-invite while in the incorrect state.
This crash would occur if a re-invite was queued while the initial INVITE
transaction was still occurring and the response to the INVITE was not ACKed.
This lack of ACK would cause the INVITE session state to never reach confirmed.
Once the transaction terminated, however, the queued re-invite would occur and
cause a crash due to this lack of state change.
This fix checks the INVITE session state before performing the re-invite to
ensure it is in the required confirmed state.
Matthew Jordan [Thu, 25 Jul 2013 04:06:32 +0000 (04:06 +0000)]
A great big renaming patch
This patch renames the bridging* files to bridge*. This may seem pedantic
and silly, but it fits better in line with current Asterisk naming conventions:
* channel is not "channeling"
* monitor is not "monitoring"
etc.
A bridge is an object. It is a first class citizen in Asterisk. "Bridging" is
the act of using a bridge on a set of channels - and the API that fulfills that
role is more than just the action.
Richard Mudgett [Wed, 24 Jul 2013 21:13:00 +0000 (21:13 +0000)]
Refactor ast_bridge_features struct.
* Reduced the number of hook containers to just dtmf_hooks,
interval_hooks, and other_hooks. As a result, several functions dealing
with the different hook containers could be combined.
* Extended the generic hook struct for DTMF and interval hooks instead of
using a variant record.
* Merged the special talk detector hook into the other_hooks container.
* Replaced ast_bridge_features_set_talk_detector() with
ast_bridge_talk_detector_hook().
Kinsey Moore [Wed, 24 Jul 2013 17:49:56 +0000 (17:49 +0000)]
Make AMI BridgeInfo action more verbose
Ensure that the BridgeInfo command provides adequate state information
about channels by publishing the full channel snapshot for
BridgeInfoChannel subevents. This prevents a two-stage lookup since
most consumers will be keying on channel names instead of uniqueids.
Matthew Jordan [Wed, 24 Jul 2013 15:38:18 +0000 (15:38 +0000)]
Perform the initial renaming of the Bridging API
This patch does the following:
* It pulls out bridge_channel and puts it into its own translation unit
* It adds public and protected headers for bridging_channel. Protected
functions are appropriate only for the Bridging API and sub-classes of a
bridge.
Richard Mudgett [Tue, 23 Jul 2013 15:59:32 +0000 (15:59 +0000)]
Restore chan_dahdi native bridging and PRI tromboned call elimination.
Created a native_dahdi bridging technology for use with the new bridging
API.
The new bridging technology is part of the chan_dahdi channel driver
because it is very specific to that driver. Rather than include the new
code directly into chan_dahdi.c the new bridge technology is in its own
file and linked into chan_dahdi.so. A large part of this change is the
mechanical process of moving declarations around so chan_dahdi.c can be
split up into more files later.
* Changed the bridging core to pass NULL frames into the channel
technologies instead of discarding them. The channel technologies may
need the proding to determine if their configuration is still valid.
(closes issue ASTERISK-21886)
Reported by: Matt Jordan
David M. Lee [Tue, 23 Jul 2013 14:57:03 +0000 (14:57 +0000)]
No more teapots.
Now that the ARI implementation is nearing some definition of
completeness, we should properly respond with 501's for unimplemented
functionality, instead of the almost humorous 418.
Matthew Jordan [Tue, 23 Jul 2013 14:49:53 +0000 (14:49 +0000)]
Kill the zombies
In previous versions of Asterisk, the zombies roamed freely,
unchecked and uncontrolled. They ravaged Asterisk systems with
their biting and their nashing and their pointy teeth.
Sometimes, you couldn't even hang them up.
Now, zombies are rare. They still *technically* exist in certain
places, but they are controlled. Kind of like a zombie zoo: you can
see them, but you can't touch them, and they can't touch you.
Bring your kids!
Because zombies are now population controlled with a very short lifespan,
there's no reason to rename the channels to '%s<ZOMBIE>'. The channels
are guaranteed to die off quickly; the rename really is just confusing
at this point.
This patch finally removes the renaming. On the plus side: this made
my life easier in CDRs during call pickup and attended transfers to
an Asterisk application. It will make other folks lives easier as well!
Review: https://reviewboard.astierks.org/r/2690/
(closes issue ASTERISK-21699)
Reported by: Matt Jordan
Kinsey Moore [Tue, 23 Jul 2013 13:52:06 +0000 (13:52 +0000)]
Add DTLS-SRTP support to chan_pjsip
This patch introduces DTLS-SRTP support to chan_pjsip and the options
necessary to configure it including an option to allow choosing between
32 and 80 byte SRTP tag lengths.
During the implementation and testing of this patch, three other bugs
were found and their fixes are included with this patch. The two in
chan_sip were a segfault relating to DTLS setup and mistaken call
rejection. The third bug fix prevents chan_pjsip from attempting to
perform bridge optimization between two endpoints if either of them is
running any form of SRTP.
David M. Lee [Tue, 23 Jul 2013 13:42:46 +0000 (13:42 +0000)]
Continue events when ARI WebSocket reconnects
This patch addresses a bug in the /ari/events WebSocket in handling
reconnects.
When a Stasis application's associated WebSocket was disconnected and
reconnected, it would not receive events for any channels or bridges
it was subscribed to.
The fix was to lazily clean up Stasis application registrations,
instead of removing them as soon as the WebSocket goes away.
When an application is unregistered at the WebSocket level, the
underlying application is simply deactivated. If the application
WebSocket is reconnected, the application is reactivated for the new
connection.
To avoid memory leaks from lingering, unused application, the
application list is cleaned up whenever new applications are
registered/unregistered.
David M. Lee [Tue, 23 Jul 2013 13:39:50 +0000 (13:39 +0000)]
Fix bridge/channel AMI event ordering issues
The stasis_cache_update messages are somewhat cumbersome to handle
with the stasis_message_router. Since all updates have the same
message type, they are normally handled with the same route.
Since caching itself is a first class component of stasis-core, it
makes sense for the router to handle the cache update messages itself.
This patch adds stasis_message_router_add_cache_update() and
stasis_message_router_remove_cache_update() to handle the routing of
stasis_cache_update messages.
This patch also corrects an issue with manager_{bridging,channels}.c,
where events might be reordered. The reordering occurs because the
components use different message routers, which they needed because
they both needed to route cache update messages. They now both use
manager's router, and add cache routes for just the cache updates they
are interested in.
Matthew Jordan [Sun, 21 Jul 2013 23:13:29 +0000 (23:13 +0000)]
Blocked revisions 395020
........
Add an upgrade note for libuuid dependency; remove note in CHANGES
This patch notes that libuuid is now a dependency for res_rtp_asterisk; this
was introduced in between 11.4.0 and 11.5.0 to resolve a dependency for
pjproject, which res_rtp_asterisk uses for ICE/STUN/TURN support.
It also removes a conflicting note from CHANGES. While support for playing
prompts to the first participant was added for app_queue, it was disabled
by default and an option added to enable it. That was properly noted in the
UPGRADE.txt file.
Matthew Jordan [Sun, 21 Jul 2013 18:17:17 +0000 (18:17 +0000)]
Provide proper ring tone in indications.conf for Malaysia
The ring tone provided in the sample indications.conf was incorrect. This patch
modifies the sample ring tone to be what it should:
ring = 425/400,0/200,425/400,0/2000
This brings it in line with the tone definition in DAHDI 2.7.0. (zonedata.c)
(closes issue ASTERISK-21997)
Reported by: Filip Jenicek
patches:
malaysia_ring.patch uploaded by phill (License 6277)
........
Merged revisions 394940 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 394941 from http://svn.asterisk.org/svn/asterisk/branches/11
Matthew Jordan [Sun, 21 Jul 2013 18:12:00 +0000 (18:12 +0000)]
Always install safe_asterisk; add configuration file support
This patch modifies the behavior of safe_asterisk in two ways:
(1) It modifies the Asterisk Makefile such that safe_asterisk is always
installed on a 'make install'. This was done as bugfixes in the
safe_asterisk script were not applied in previous version of Asterisk
without first removing the old version of the script.
(2) In order to keep a newly installed version of safe_asterisk from impacting
local modifications, a new config file - safe_asterisk.conf.sample - has
been provided. Settings that were previously modified in safe_asterisk can
be set there instead.
(closes issue ASTERISK-21965)
Reported by: Jeremy Kister
patches:
safe_asterisk.patch uploaded by jkister (License 6232)
Matthew Jordan [Sun, 21 Jul 2013 03:10:41 +0000 (03:10 +0000)]
Tolerate presence of RFC2965 Cookie2 header by ignoring it
This patch modifies parsing of cookies in Asterisk's http server by doing an
explicit comparison of the "Cookie" header instead of looking at the first
6 characters to determine if the header is a cookie header. This avoids
parsing "Cookie2" headers and overwriting the previously parsed "Cookie"
header.
Note that we probably should be appending the cookies in each "Cookie"
header to the parsed results; however, while clients can send multiple
cookie headers they never really do. While this patch doesn't improve
Asterisk's behavior in that regard, it shouldn't make it any worse either.
Note that the solution in this patch was pointed out on the issue by the
issue reporter, Stuart Henderson.
(closes issue ASTERISK-21789)
Reported by: Stuart Henderson
Tested by: mjordan, Stuart Henderson
........
Merged revisions 394899 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 394900 from http://svn.asterisk.org/svn/asterisk/branches/11
Matthew Jordan [Sun, 21 Jul 2013 02:39:37 +0000 (02:39 +0000)]
Update PostgreSQL realtime scripts with schema for queue_log table
This patch updates the realtime SQL scripts with an entry that will create the
queue_log table. This brings the PostgreSQL scripts inline with the MySQL
scripts, with respect to what tables they will create.
Matthew Jordan [Sun, 21 Jul 2013 02:30:58 +0000 (02:30 +0000)]
Add additional control frame types to the IAX2 parser for debug messages
This patch adds some of the more recent control frame types to the IAX2
parser. When IAX2 debugging is enabled, it will now show more of the control
frame types.
Matthew Jordan [Sun, 21 Jul 2013 02:11:49 +0000 (02:11 +0000)]
Allow setting allowmultiplelogin on an account basis
This patch modifies manager to allow the allowmultiplelogin setting to be set
on an account by account basis. When set in the general context, it will act
as the default for the defined accounts. Setting it in the account will
override the general setting.
Kinsey Moore [Sat, 20 Jul 2013 13:25:05 +0000 (13:25 +0000)]
Add CEL local optimization record type
This adds a new CEL event type, AST_CEL_LOCAL_OPTIMIZE, to represent
local channel optimizations. Local channel optimizations were one of
several things conveyed by the now defunct BRIDGE_UPDATE event type.
This also adds a unit test to test generation of this new CEL event.
Kinsey Moore [Sat, 20 Jul 2013 13:10:22 +0000 (13:10 +0000)]
Add transfer support to CEL
This adds CEL support for blind and attended transfers and call pickup.
During the course of adding this functionality I noticed that
CONF_ENTER, CONF_EXIT, and BRIDGE_TO_CONF events are particularly
useless without a bridge identifier, so I added that as well.
This adds tests for blind transfers, several types of attended
transfers, and call pickup.
The extra field in CEL records now consists of a JSON blob whose fields
are defined on a per-event basis.
Richard Mudgett [Sat, 20 Jul 2013 01:11:38 +0000 (01:11 +0000)]
Regroup the ao2 search_flags.
Moved the OBJ_POINTER, OBJ_KEY, and OBJ_PARTIAL_KEY flags together into a
field and renamed them to OBJ_SEARCH_OBJECT, OBJ_SEARCH_KEY, and
OBJ_SEARCH_PARTIAL_KEY respectively. The values were selected to keep
existing code compiling and working until the codebase can be changed to
stop using these values as bit flags and use them as an enum field.
The old names are defined to the new names for backward compatibility.
Jonathan Rose [Fri, 19 Jul 2013 19:35:21 +0000 (19:35 +0000)]
ARI: Bridge Playback, Bridge Record
Adds a new channel driver for creating channels for specific purposes
in bridges, primarily to act as either recorders or announcers. Adds
ARI commands for playing announcements to ever participant in a bridge
as well as for recording a bridge. This patch also includes some
documentation/reponse fixes to related ARI models such as playback
controls.
(closes issue ASTERISK-21592)
Reported by: Matt Jordan
(closes issue ASTERISK-21593)
Reported by: Matt Jordan