[asterisk-users] How to execute priorities following a caller hangup in a successful Dial?

David P davidswalkabout at gmail.com
Tue Jun 5 19:40:58 CDT 2018


FWIW, I added the following after the Dial, and it doesn't appear in cli
after peer hangup:

same => n,NoOp(After Dial ${AddressToReachPeer})

I also tried putting 'g' before the 'b'.

I also tried removing the context headers of the hangup handlers and
predial handler, and just referring to those by extensions. No difference.

On Tue, Jun 5, 2018 at 3:17 PM, David P <davidswalkabout at gmail.com> wrote:

> This has been super-helpful, Eric. However, the handleHangupByPeer priorities
> below are still not run when the peer hangs-up. The last line in the cli
> when the peer hangs-up is still:
> Strict RTP learning complete - Locking on source address
> (Although sometimes there is also: Retransmission timeout reached on
> transmission)
>
>  same => n(callPeer),Set(GLOBAL(CB${IndexIntoPeers}CurrentCallsCount)=$[${PeerCurrentCallsCount}
> + 1])
>  ; Ensure that hangup by caller/inbound-channel will invoke
> handleHangupByCaller.
>  same => n,Set(CHANNEL(hangup_handler_push)=handleHangupByCaller,s,
> 1(args))
>  same => n,Set(AddressToReachPeer=SIP/${EXTEN:0:4}@${PeerBeingConsidered})
>  ; Ensure that the channel of the peer (i.e. outbound-channel) is
> configured with hangup handler.
>  same => n,Dial(${AddressToReachPeer},,b(beforeDialingPeerConfigureItsC
> hannelForPeerHangupHandling^s^1))
>  same => n,Hangup
>
> [beforeDialingPeerConfigureItsChannelForPeerHangupHandling]
> exten => s,1,Set(CHANNEL(hangup_handler_push)=
> handleHangupByPeer,s,1(args))
>  same => n,Return
>
> [handleHangupByPeer]
>  ; Ensure that GLOBAL(CB${IndexIntoPeers}CurrentCallsCount) is
> decremented after hangup, and end-of-call-epoch is set.
> exten => s,1,NoOp(${PeerBeingConsidered} peer channel: Entered
> handleHangupByCallerOrPeer Calls ${CB${IndexIntoPeers}CurrentCallsCount})
>  same => n,Set(GLOBAL(CB${IndexIntoPeers}CurrentCallsCount)=$[${CB${
> IndexIntoPeers}CurrentCallsCount} - 1])
>  same => n,Set(GLOBAL(${PeerBeingConsidered}EpochAtCallEnd)=${EPOCH})
>  same => n,Return
>
> [handleHangupByCaller]
>  ; Ensure that GLOBAL(CB${IndexIntoPeers}CurrentCallsCount) is
> decremented after hangup, and end-of-call-epoch is set.
> exten => s,1,NoOp(${PeerBeingConsidered} caller channel: Entered
> handleHangupByCallerOrPeer Calls ${CB${IndexIntoPeers}CurrentCallsCount})
>  same => n,Set(GLOBAL(CB${IndexIntoPeers}CurrentCallsCount)=$[${CB${
> IndexIntoPeers}CurrentCallsCount} - 1])
>  same => n,Set(GLOBAL(${PeerBeingConsidered}EpochAtCallEnd)=${EPOCH})
>  same => n,Return
>
>
> When the caller hangs-up, handleHangupByCaller is run first, then handleHangupByPeer
> runs. (And strangely, the value of global CB${IndexIntoPeers}CurrentCallsCount
> isn't accessible in handleHangupByPeer.)
>
> Cheers,
> David
>
>
> On Tue, Jun 5, 2018 at 12:58 PM, Eric Wieling <ewieling at nyigc.com> wrote:
>
>> Don't use the _. pattern.  Ever.
>>
>> The call has two channels so it needs two hangup handlers, something like
>> this, though I've not tested it.
>>
>> [some_context]
>> exten => _X.,1,Noop
>>  same => n,Set(CHANNEL(hangup_handler_push)=my_caller_hangup_handler)
>>  same => n,Dial(SIP/number at peer,b(pre_dial^s^1))
>>  same => n,Hangup
>>
>> [pre_dial]
>> exten => s,1,Set(CHANNEL(hangup_handler_push)=my_called_hangup_handler)
>>  same => Return
>>
>> See: https://wiki.asterisk.org/wiki/display/AST/Pre-Dial+Handlers
>> and https://wiki.asterisk.org/wiki/display/AST/Hangup+Handlers
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20180605/051751d6/attachment.html>


More information about the asterisk-users mailing list