Better handle parking in CDRs
authorMatthew Jordan <mjordan@digium.com>
Fri, 28 Jun 2013 15:50:56 +0000 (15:50 +0000)
committerMatthew Jordan <mjordan@digium.com>
Fri, 28 Jun 2013 15:50:56 +0000 (15:50 +0000)
commit6cc03db6426b70dce47471a20ab5d42f163dc419
treef4c1c79573c63e00ef165e4784a6b806e1634593
parentf6211b6b70414499878afd8101be6018dc08ec6a
Better handle parking in CDRs

Parking typically occurs when a channel is transferred to a parking extension.
When this occurs, the channel never actually hits the dialplan if the extension
it was transferred to was a "parking extension", that is, the extension in
the first priority calls the Park application. Instead, the channel is
immediately sent into the holding bridge acting as the parking bridge.

This is problematic.

Because we never go out to the dialplan, the CDRs won't transition properly
and the application field will not be set to "Park". CDRs typically swallow
holding bridges, so the CDR itself won't even be generated.

This patch handles this by pulling out the holding bridge handling into its
own CDR state. CDRs now have an explicit parking state that accounts for this
specific subclass of the holding bridge. In addition, we handle the parking
stasis message to set application specific data on the CDR such that the
last known application for the CDR properly reflects "Park".

This is a bit sad since we're working around the odd internal implementation
of parking that exists in Asterisk (and that we had to maintain in order to
continue to meet some odd use cases of parking), but at least the code to
handle that is where it belongs: in CDRs as opposed to sprinkled liberally
throughout the codebase.

This patch also properly clears the OUTBOUND channel flag from a channel when
it leaves a bridge, and tweaks up dialing handling to properly compare the
correct CDR with the channel calling/being dialed.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393130 65c4cc65-6c06-0410-ace0-fbb531ad65f3
include/asterisk/cdr.h
include/asterisk/parking.h
main/asterisk.c
main/bridging.c
main/cdr.c