In article <[email protected]>,
Alex Villací­s Lasso <[email protected]> wrote:
> In my application, I am using AMI to run an Originate command between a 
> channel and a dialplan application (NOT a
> context). In my case, the application I want to invoke is FastAGI. The 
> Originate AMI command works correctly, but
> Asterisk generates a very 
> short (0-1s) duration for the CDR that results from this call, regardless of 
> the time spent running the FastAGI
> application. I want the CDR duration to reflect the time spent in the 
> entirety of the call, as is normal for ordinary
> calls. What should I do? I 
> am running Asterisk 11.25.3 .

Are you using Local channels as the target channel?

I found what I believe is an issue with CDR handling when masquerading Local 
channels, when I ported
one of my old applications from Asterisk 1.2.32 to 11.25.3. It was recording an 
incorrect CDR
for the setup part of the call, and none for the answered part. In 1.2.32 I was 
getting two CDRs,
one for the setup part and another for the answered part.

I eventually tracked it down to ast_do_masquerade() in channel.c, and made the 
following change,
which corrected the CDR behaviour back to the same as what Asterisk 1.2 had 
done:

$ diff -u --show-c-function channel.c.orig channel.c
--- channel.c.orig      2017-09-19 17:03:38.000000000 +0100
+++ channel.c   2018-05-29 11:13:41.000000000 +0100
@@ -6864,7 +6864,9 @@ int ast_do_masquerade(struct ast_channel
        } exchange;
        struct ast_channel *clonechan, *chans[2];
        struct ast_channel *bridged;
+#ifdef I_THINK_THIS_IS_WRONG /* Tony Mountifield, 2018-03-29. Removing this 
code fixes lost CDRs with masquerade */
        struct ast_cdr *cdr;
+#endif
        struct ast_datastore *xfer_ds;
        struct xfer_masquerade_ds *xfer_colp;
        struct ast_format rformat;
@@ -7035,10 +7037,12 @@ int ast_do_masquerade(struct ast_channel
        ast_channel_tech_pvt_set(original, ast_channel_tech_pvt(clonechan));
        ast_channel_tech_pvt_set(clonechan, t_pvt);

+#ifdef I_THINK_THIS_IS_WRONG /* Tony Mountifield, 2018-03-29. Removing this 
code fixes lost CDRs with masquerade */
        /* Swap the cdrs */
        cdr = ast_channel_cdr(original);
        ast_channel_cdr_set(original, ast_channel_cdr(clonechan));
        ast_channel_cdr_set(clonechan, cdr);
+#endif

        /* Swap the alertpipes */
        ast_channel_internal_alertpipe_swap(original, clonechan);
$

I didn't research what version this change appeared in, nor whether it has been 
subsequently fixed in
later versions of Asterisk. There was no point reporting it in Asterisk 11, as 
that was out of LTS
by the time I discovered it.

So you could try making the above changes to channel.c and see if it improves 
the CDRs for you.

Cheers
Tony

-- 
Tony Mountifield
Work: [email protected] - http://www.softins.co.uk
Play: [email protected] - http://tony.mountifield.org

-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

Check out the new Asterisk community forum at: https://community.asterisk.org/

New to Asterisk? Start here:
      https://wiki.asterisk.org/wiki/display/AST/Getting+Started

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users

Reply via email to