[asterisk-bugs] [JIRA] (ASTERISK-20933) No CDR created after call has been split and then bridged back

Alex Barnes (JIRA) noreply at issues.asterisk.org
Mon Jan 14 08:10:45 CST 2013


     [ https://issues.asterisk.org/jira/browse/ASTERISK-20933?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alex Barnes updated ASTERISK-20933:
-----------------------------------

    Description: 
Scenario
===========================

No CDR record is created after a call has been split and then bridged back.  See example dialplan below where a CDR record is created at all points right up to the Bridge command but not after.  Reversing which channel gets bridged still results in no CDR, i.e. the caller doing the bridging or the callee.

In our case the VoiceSafe is acting as an ISDN middle-man to record and log calls before being passed onto the PBX or telco.  I haven't tested purely SIP but I imagine it would be the same outcome.

Note that this was working in 1.8.13 but appears to have been broken in 1.8.14 and above.



Versions
===========================
All packages installed via Yum.

* 1.8.13.1-1_centos5 = OK
* 1.8.14.1-1_centos5 = No CDR
* 1.8.15.1-1_centos5 = No CDR
* 1.8.15-0.cert1.1_centos5 = No CDR
* 1.8.19.1-1_centos5 = No CDR


Dialplan
===========================
{code}
[from-inside]
exten => 321,1,SET(__DYNAMIC_FEATURES=testBridge)
exten => 321,n,Dial(DAHDI/g1/321,300,)

[macro-test-bridge]
exten => s,1,NoOp(In test-bridge)
exten => s,n,Set(operator-channel=${CHANNEL})
exten => s,n,Set(caller-channel=${BRIDGEPEER})

; Sync variables on both channels
exten => s,n,NoOp(Syncing channel vars)
exten => s,n,Set(SHARED(operator-channel,${operator-channel})=${operator-channel})
exten => s,n,Set(SHARED(caller-channel,${operator-channel})=${caller-channel})
exten => s,n,Set(SHARED(operator-channel,${caller-channel})=${operator-channel})
exten => s,n,Set(SHARED(caller-channel,${caller-channel})=${caller-channel})

exten => s,n,ChannelRedirect(${caller-channel},test-wait-bridge,1,1)
exten => s,n,ChannelRedirect(${operator-channel},test-wait,1,1)

[test-wait-bridge]
exten => 1,1,NoOp(In test-wait-bridge)
exten => 1,n,Wait(5)
; Hanging up here rather than bridging will results in CDR correctly being created
; exten => 1,n,Hangup
exten => 1,n,Bridge(${SHARED(operator-channel)})

[test-wait]
exten => 1,1,NoOp(In test-wait)
exten => 1,n,Wait(30)
exten => 1,n,Hangup
{code}

features.conf
===========================
{code}
testBridge  => #2,peer,Macro,test-bridge
{code}

Example Output
===========================
{code}
    -- Accepting overlap call from '123' to '321' on channel 0/1, span 2
    -- Starting simple switch on 'DAHDI/i2/123-28'
    -- Executing [321 at from-inside:1] Set("DAHDI/i2/123-28", "__DYNAMIC_FEATURES=testBridge") in new stack
    -- Executing [321 at from-inside:2] Dial("DAHDI/i2/123-28", "DAHDI/g1/321,300,") in new stack
    -- Requested transfer capability: 0x00 - SPEECH
    -- Called DAHDI/g1/321
    -- DAHDI/i1/321-27 is making progress passing it to DAHDI/i2/123-28
    -- DAHDI/i1/321-27 is proceeding passing it to DAHDI/i2/123-28
    -- DAHDI/i1/321-27 is ringing
    -- DAHDI/i1/321-27 answered DAHDI/i2/123-28
    --  Feature Found: testBridge exten: testBridge
    -- Executing [s at macro-test-bridge:1] NoOp("DAHDI/i2/123-28", "In test-bridge") in new stack
    -- Executing [s at macro-test-bridge:2] Set("DAHDI/i2/123-28", "operator-channel=DAHDI/i2/123-28") in new stack
    -- Executing [s at macro-test-bridge:3] Set("DAHDI/i2/123-28", "caller-channel=DAHDI/i1/321-27") in new stack
    -- Executing [s at macro-test-bridge:4] NoOp("DAHDI/i2/123-28", "Syncing channel vars") in new stack
    -- Executing [s at macro-test-bridge:5] Set("DAHDI/i2/123-28", "SHARED(operator-channel,DAHDI/i2/123-28)=DAHDI/i2/123-28") in new stack
    -- Executing [s at macro-test-bridge:6] Set("DAHDI/i2/123-28", "SHARED(caller-channel,DAHDI/i2/123-28)=DAHDI/i1/321-27") in new stack
    -- Executing [s at macro-test-bridge:7] Set("DAHDI/i2/123-28", "SHARED(operator-channel,DAHDI/i1/321-27)=DAHDI/i2/123-28") in new stack
    -- Executing [s at macro-test-bridge:8] Set("DAHDI/i2/123-28", "SHARED(caller-channel,DAHDI/i1/321-27)=DAHDI/i1/321-27") in new stack
    -- Executing [s at macro-test-bridge:9] ChannelRedirect("DAHDI/i2/123-28", "DAHDI/i1/321-27,test-wait-bridge,1,1") in new stack
    -- Executing [s at macro-test-bridge:10] ChannelRedirect("DAHDI/i2/123-28", "DAHDI/i2/123-28,test-wait,1,1") in new stack
  == Channel 'DAHDI/i2/123-28' jumping out of macro 'test-bridge'
    -- Executing [1 at test-wait-bridge:1] NoOp("DAHDI/i1/321-27", "In test-wait-bridge") in new stack
    -- Executing [1 at test-wait-bridge:2] Wait("DAHDI/i1/321-27", "5") in new stack
  == Spawn extension (test-wait, 1, 1) exited non-zero on 'DAHDI/i2/123-28'
    -- Executing [1 at test-wait:1] NoOp("DAHDI/i2/123-28", "In test-wait") in new stack
    -- Executing [1 at test-wait:2] Wait("DAHDI/i2/123-28", "30") in new stack
    -- Executing [1 at test-wait-bridge:3] Bridge("DAHDI/i1/321-27", "DAHDI/i2/123-28") in new stack
  == Spawn extension (test-wait, 1, 2) exited non-zero on 'Bridge/DAHDI/i2/123-28<ZOMBIE>'
    -- Span 1: Channel 0/1 got hangup request, cause 16
    -- Hungup 'DAHDI/i1/321-27'
    -- Executing [1 at test-wait:3] Hangup("DAHDI/i2/123-28", "") in new stack
  == Spawn extension (test-wait, 1, 3) exited non-zero on 'DAHDI/i2/123-28'
    -- Hungup 'DAHDI/i2/123-28'
{code}


  was:
Scenario
===========================

No CDR record is created after a call has been split and then bridged back.  See example dialplan below where a CDR record is created at all points right up to the Bridge command but not after.  Reversing which channel gets bridged still results in no CDR, i.e. the caller doing the bridging or the callee.

In our case the VoiceSafe is acting as an ISDN middle-man to record and log calls before being passed onto the PBX or telco.  I haven't tested purely SIP but I imagine it would be the same outcome.

Note that this was working in 1.8.13 but appears to have been broken in 1.8.14 and above.



Versions
===========================
All packages installed via Yum.

*1.8.13.1-1_centos5 = OK
*1.8.14.1-1_centos5 = No CDR
*1.8.15.1-1_centos5 = No CDR
*1.8.15-0.cert1.1_centos5 = No CDR
*1.8.19.1-1_centos5 = No CDR


Dialplan
===========================
{code}
[from-inside]
exten => 321,1,SET(__DYNAMIC_FEATURES=testBridge)
exten => 321,n,Dial(DAHDI/g1/321,300,)

[macro-test-bridge]
exten => s,1,NoOp(In test-bridge)
exten => s,n,Set(operator-channel=${CHANNEL})
exten => s,n,Set(caller-channel=${BRIDGEPEER})

; Sync variables on both channels
exten => s,n,NoOp(Syncing channel vars)
exten => s,n,Set(SHARED(operator-channel,${operator-channel})=${operator-channel})
exten => s,n,Set(SHARED(caller-channel,${operator-channel})=${caller-channel})
exten => s,n,Set(SHARED(operator-channel,${caller-channel})=${operator-channel})
exten => s,n,Set(SHARED(caller-channel,${caller-channel})=${caller-channel})

exten => s,n,ChannelRedirect(${caller-channel},test-wait-bridge,1,1)
exten => s,n,ChannelRedirect(${operator-channel},test-wait,1,1)

[test-wait-bridge]
exten => 1,1,NoOp(In test-wait-bridge)
exten => 1,n,Wait(5)
; Hanging up here rather than bridging will results in CDR correctly being created
; exten => 1,n,Hangup
exten => 1,n,Bridge(${SHARED(operator-channel)})

[test-wait]
exten => 1,1,NoOp(In test-wait)
exten => 1,n,Wait(30)
exten => 1,n,Hangup
{code}

features.conf
===========================
{code}
testBridge  => #2,peer,Macro,test-bridge
{code}

Example Output
===========================
{code}
    -- Accepting overlap call from '123' to '321' on channel 0/1, span 2
    -- Starting simple switch on 'DAHDI/i2/123-28'
    -- Executing [321 at from-inside:1] Set("DAHDI/i2/123-28", "__DYNAMIC_FEATURES=testBridge") in new stack
    -- Executing [321 at from-inside:2] Dial("DAHDI/i2/123-28", "DAHDI/g1/321,300,") in new stack
    -- Requested transfer capability: 0x00 - SPEECH
    -- Called DAHDI/g1/321
    -- DAHDI/i1/321-27 is making progress passing it to DAHDI/i2/123-28
    -- DAHDI/i1/321-27 is proceeding passing it to DAHDI/i2/123-28
    -- DAHDI/i1/321-27 is ringing
    -- DAHDI/i1/321-27 answered DAHDI/i2/123-28
    --  Feature Found: testBridge exten: testBridge
    -- Executing [s at macro-test-bridge:1] NoOp("DAHDI/i2/123-28", "In test-bridge") in new stack
    -- Executing [s at macro-test-bridge:2] Set("DAHDI/i2/123-28", "operator-channel=DAHDI/i2/123-28") in new stack
    -- Executing [s at macro-test-bridge:3] Set("DAHDI/i2/123-28", "caller-channel=DAHDI/i1/321-27") in new stack
    -- Executing [s at macro-test-bridge:4] NoOp("DAHDI/i2/123-28", "Syncing channel vars") in new stack
    -- Executing [s at macro-test-bridge:5] Set("DAHDI/i2/123-28", "SHARED(operator-channel,DAHDI/i2/123-28)=DAHDI/i2/123-28") in new stack
    -- Executing [s at macro-test-bridge:6] Set("DAHDI/i2/123-28", "SHARED(caller-channel,DAHDI/i2/123-28)=DAHDI/i1/321-27") in new stack
    -- Executing [s at macro-test-bridge:7] Set("DAHDI/i2/123-28", "SHARED(operator-channel,DAHDI/i1/321-27)=DAHDI/i2/123-28") in new stack
    -- Executing [s at macro-test-bridge:8] Set("DAHDI/i2/123-28", "SHARED(caller-channel,DAHDI/i1/321-27)=DAHDI/i1/321-27") in new stack
    -- Executing [s at macro-test-bridge:9] ChannelRedirect("DAHDI/i2/123-28", "DAHDI/i1/321-27,test-wait-bridge,1,1") in new stack
    -- Executing [s at macro-test-bridge:10] ChannelRedirect("DAHDI/i2/123-28", "DAHDI/i2/123-28,test-wait,1,1") in new stack
  == Channel 'DAHDI/i2/123-28' jumping out of macro 'test-bridge'
    -- Executing [1 at test-wait-bridge:1] NoOp("DAHDI/i1/321-27", "In test-wait-bridge") in new stack
    -- Executing [1 at test-wait-bridge:2] Wait("DAHDI/i1/321-27", "5") in new stack
  == Spawn extension (test-wait, 1, 1) exited non-zero on 'DAHDI/i2/123-28'
    -- Executing [1 at test-wait:1] NoOp("DAHDI/i2/123-28", "In test-wait") in new stack
    -- Executing [1 at test-wait:2] Wait("DAHDI/i2/123-28", "30") in new stack
    -- Executing [1 at test-wait-bridge:3] Bridge("DAHDI/i1/321-27", "DAHDI/i2/123-28") in new stack
  == Spawn extension (test-wait, 1, 2) exited non-zero on 'Bridge/DAHDI/i2/123-28<ZOMBIE>'
    -- Span 1: Channel 0/1 got hangup request, cause 16
    -- Hungup 'DAHDI/i1/321-27'
    -- Executing [1 at test-wait:3] Hangup("DAHDI/i2/123-28", "") in new stack
  == Spawn extension (test-wait, 1, 3) exited non-zero on 'DAHDI/i2/123-28'
    -- Hungup 'DAHDI/i2/123-28'
{code}


    
> No CDR created after call has been split and then bridged back
> --------------------------------------------------------------
>
>                 Key: ASTERISK-20933
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-20933
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>          Components: CDR/General, Core/Bridging
>    Affects Versions: 1.8.14.1, 1.8.15.1, 1.8.19.1
>         Environment: CentOS 5 using Digium yum repositories
>            Reporter: Alex Barnes
>
> Scenario
> ===========================
> No CDR record is created after a call has been split and then bridged back.  See example dialplan below where a CDR record is created at all points right up to the Bridge command but not after.  Reversing which channel gets bridged still results in no CDR, i.e. the caller doing the bridging or the callee.
> In our case the VoiceSafe is acting as an ISDN middle-man to record and log calls before being passed onto the PBX or telco.  I haven't tested purely SIP but I imagine it would be the same outcome.
> Note that this was working in 1.8.13 but appears to have been broken in 1.8.14 and above.
> Versions
> ===========================
> All packages installed via Yum.
> * 1.8.13.1-1_centos5 = OK
> * 1.8.14.1-1_centos5 = No CDR
> * 1.8.15.1-1_centos5 = No CDR
> * 1.8.15-0.cert1.1_centos5 = No CDR
> * 1.8.19.1-1_centos5 = No CDR
> Dialplan
> ===========================
> {code}
> [from-inside]
> exten => 321,1,SET(__DYNAMIC_FEATURES=testBridge)
> exten => 321,n,Dial(DAHDI/g1/321,300,)
> [macro-test-bridge]
> exten => s,1,NoOp(In test-bridge)
> exten => s,n,Set(operator-channel=${CHANNEL})
> exten => s,n,Set(caller-channel=${BRIDGEPEER})
> ; Sync variables on both channels
> exten => s,n,NoOp(Syncing channel vars)
> exten => s,n,Set(SHARED(operator-channel,${operator-channel})=${operator-channel})
> exten => s,n,Set(SHARED(caller-channel,${operator-channel})=${caller-channel})
> exten => s,n,Set(SHARED(operator-channel,${caller-channel})=${operator-channel})
> exten => s,n,Set(SHARED(caller-channel,${caller-channel})=${caller-channel})
> exten => s,n,ChannelRedirect(${caller-channel},test-wait-bridge,1,1)
> exten => s,n,ChannelRedirect(${operator-channel},test-wait,1,1)
> [test-wait-bridge]
> exten => 1,1,NoOp(In test-wait-bridge)
> exten => 1,n,Wait(5)
> ; Hanging up here rather than bridging will results in CDR correctly being created
> ; exten => 1,n,Hangup
> exten => 1,n,Bridge(${SHARED(operator-channel)})
> [test-wait]
> exten => 1,1,NoOp(In test-wait)
> exten => 1,n,Wait(30)
> exten => 1,n,Hangup
> {code}
> features.conf
> ===========================
> {code}
> testBridge  => #2,peer,Macro,test-bridge
> {code}
> Example Output
> ===========================
> {code}
>     -- Accepting overlap call from '123' to '321' on channel 0/1, span 2
>     -- Starting simple switch on 'DAHDI/i2/123-28'
>     -- Executing [321 at from-inside:1] Set("DAHDI/i2/123-28", "__DYNAMIC_FEATURES=testBridge") in new stack
>     -- Executing [321 at from-inside:2] Dial("DAHDI/i2/123-28", "DAHDI/g1/321,300,") in new stack
>     -- Requested transfer capability: 0x00 - SPEECH
>     -- Called DAHDI/g1/321
>     -- DAHDI/i1/321-27 is making progress passing it to DAHDI/i2/123-28
>     -- DAHDI/i1/321-27 is proceeding passing it to DAHDI/i2/123-28
>     -- DAHDI/i1/321-27 is ringing
>     -- DAHDI/i1/321-27 answered DAHDI/i2/123-28
>     --  Feature Found: testBridge exten: testBridge
>     -- Executing [s at macro-test-bridge:1] NoOp("DAHDI/i2/123-28", "In test-bridge") in new stack
>     -- Executing [s at macro-test-bridge:2] Set("DAHDI/i2/123-28", "operator-channel=DAHDI/i2/123-28") in new stack
>     -- Executing [s at macro-test-bridge:3] Set("DAHDI/i2/123-28", "caller-channel=DAHDI/i1/321-27") in new stack
>     -- Executing [s at macro-test-bridge:4] NoOp("DAHDI/i2/123-28", "Syncing channel vars") in new stack
>     -- Executing [s at macro-test-bridge:5] Set("DAHDI/i2/123-28", "SHARED(operator-channel,DAHDI/i2/123-28)=DAHDI/i2/123-28") in new stack
>     -- Executing [s at macro-test-bridge:6] Set("DAHDI/i2/123-28", "SHARED(caller-channel,DAHDI/i2/123-28)=DAHDI/i1/321-27") in new stack
>     -- Executing [s at macro-test-bridge:7] Set("DAHDI/i2/123-28", "SHARED(operator-channel,DAHDI/i1/321-27)=DAHDI/i2/123-28") in new stack
>     -- Executing [s at macro-test-bridge:8] Set("DAHDI/i2/123-28", "SHARED(caller-channel,DAHDI/i1/321-27)=DAHDI/i1/321-27") in new stack
>     -- Executing [s at macro-test-bridge:9] ChannelRedirect("DAHDI/i2/123-28", "DAHDI/i1/321-27,test-wait-bridge,1,1") in new stack
>     -- Executing [s at macro-test-bridge:10] ChannelRedirect("DAHDI/i2/123-28", "DAHDI/i2/123-28,test-wait,1,1") in new stack
>   == Channel 'DAHDI/i2/123-28' jumping out of macro 'test-bridge'
>     -- Executing [1 at test-wait-bridge:1] NoOp("DAHDI/i1/321-27", "In test-wait-bridge") in new stack
>     -- Executing [1 at test-wait-bridge:2] Wait("DAHDI/i1/321-27", "5") in new stack
>   == Spawn extension (test-wait, 1, 1) exited non-zero on 'DAHDI/i2/123-28'
>     -- Executing [1 at test-wait:1] NoOp("DAHDI/i2/123-28", "In test-wait") in new stack
>     -- Executing [1 at test-wait:2] Wait("DAHDI/i2/123-28", "30") in new stack
>     -- Executing [1 at test-wait-bridge:3] Bridge("DAHDI/i1/321-27", "DAHDI/i2/123-28") in new stack
>   == Spawn extension (test-wait, 1, 2) exited non-zero on 'Bridge/DAHDI/i2/123-28<ZOMBIE>'
>     -- Span 1: Channel 0/1 got hangup request, cause 16
>     -- Hungup 'DAHDI/i1/321-27'
>     -- Executing [1 at test-wait:3] Hangup("DAHDI/i2/123-28", "") in new stack
>   == Spawn extension (test-wait, 1, 3) exited non-zero on 'DAHDI/i2/123-28'
>     -- Hungup 'DAHDI/i2/123-28'
> {code}

--
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