[asterisk-bugs] [JIRA] (ASTERISK-20747) SLA outbound calls do not record accurate CDR record.

dkerr (JIRA) noreply at issues.asterisk.org
Tue Nov 27 18:54:45 CST 2012


    [ https://issues.asterisk.org/jira/browse/ASTERISK-20747?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=200184#comment-200184 ] 

dkerr commented on ASTERISK-20747:
----------------------------------

I have been looking at the source code to figure out how to fix this and my analysis implicates channel bridging (in features.c) and channel masquerading (in channel.c) it is actions that take place in these that cause the problem.  Specifically, when the outbound VoIP channel is answered at the destination, the bridge code attempts to "connect" it to the "Local" channel that performed the Dial(). In doing so a masquerade is performed to move the newly answered "SIP" channel into the structure of the existing "Local" channel. This screws up CDR records and in recognition of this a ast_cdr_specialized_reset() is performed by the bridge code which has the effect of marking the record(s) as AST_CDR_NULL and this then blocks and future logging of the CDR. 
                
> SLA outbound calls do not record accurate CDR record.
> -----------------------------------------------------
>
>                 Key: ASTERISK-20747
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-20747
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>          Components: Applications/app_meetme, Applications/SLA
>    Affects Versions: 1.8.18.0, 11.0.1
>         Environment: Astlinux
>            Reporter: dkerr
>
> In further pursuit of SLA happiness I have found that outbound calls from an SLAStation to a SIP trunk do not record an accurate CDR.  This is a problem for any environment where billsec is required for billing purposes.
> This occurs 100% of the time, but understanding what is going on is fairly complex.  Consider first what happens in a non-SLA environment...
> A SIP extension places a call through Asterisk, asterisk uses Dial() command to connect the call to an outbound SIP trunk.  There is an inbound SIP channel from the telephone to asterisk, and an outbound SIP channel from asterisk to the VoIP provider. Asterisk bridges these and records in a single CDR record the start time, answer time and end time and the source and destination SIP channels, et al. Nice.
> Now consider a scenario where a SLAStation makes an outbound call. In this case there is a channel into asterisk from the telephone that is placed into a Meetme conference. Then the SLA code triggers a Dial() to the requested destination, say a SIP VoIP provider trunk and when it answers it is also placed into the Meetme conference.  Any other SLAStation can also join this meetme conference. In this scenario Asterisk generates two CDR records. One for the telephone connecting into the conference. Another for the channel connecting to the VoIP provider.  If another extension also joins the call by connecting into the same SLA trunk (joining the same call) then it generates its own CDR record.  So far so good.
> The problem is that the CDR record for the connection out from asterisk to the VoIP provider shows a billsec of zero.  In fact the CDR is "ended" when the destination party answers, instead of when they hangup.  

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira



More information about the asterisk-bugs mailing list