Skip to content

[FreeswitchCoreLib] bridge call with hangup_after_bridge=false #2862

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

renatoluizbracco27
Copy link

We developed a Call Center application built on a PABX that uses Freeswitch as a Telecom stack.
The bug occurs when an Attendant of the Call center is permannentely logged in a voice channel (ALeg).
A CRM (Customer Relationship Management) stack that is part of the Call Center commands this PABX to make outbound calls to customers.
These calls (one at a time - BLeg) will be bridge with the attendant's (ALeg) call.
At the end of the call the connection with the customer (BLeg) is disconnected and the attendant's connection (ALeg) is kept since the variable hangup_after_bridge is set as false in the dialplan.
The Call Center repeats this process for the next customers. The attendant's channel (ALeg) is kept continously up. Most of the time this setup works well but sometimes after 1500 calls received by the attendant its channel (ALeg) is wrongly hanged up by the Freeswitch so here is the bug. Studying your code I changed code in 2 points at the switch_ivr_bridge.c file and 1 at the switch_ivr_originate.c file that I think would fix this issue.

2 cases possible

Problem occurs when two legs were bridged and the remote side in BLeg issues a BYE.
Assume Bleg call completed , uuid_bridge issued , received BYE in BLeg with ALeg Transfer bit flag equal false , ALeg and BLeg in CS_SOFT_EXECUTE
in the previous code ALeg channel call sometimes is hangedd up even with hangup_after_bridge set to false, our correction hangup channel only if hangup_after_bridge equal true or else it set ALeg call state to CS_EXECUTE see code changes in
switch_ivr_bridge.c

Problem occurs when two legs were bridged and the remote side in BLeg issues a BYE.
Bleg call was complete , uuid_bridge issued , received BYE in BLeg when ALeg has Transfer flag bit value equal true.
in the previous code ALeg channel call sometimes is hanged up even with hangup_after_bridge set to false, with our corretion hangup channel only if hangup_after_bridge equal true see code changes in switch_ivr_originate.c

We developed a Call Center application built on a PABX that uses
Freeswitch as a Telecom stack.
The bug occurs when an Attendant of the Call center is
permannentely logged in a voice channel (ALeg).
A CRM (Customer Relationship Management) stack that is part of
the Call Center commands this PABX to make outbound calls to
customers.
These calls (one at a time - BLeg) will be bridge with the
attendant's (ALeg) call.
At the end of the call the connection with the customer (BLeg)
is disconnected and the attendant's connection (ALeg) is kept
since the variable hangup_after_bridge is set as false in the
dialplan.
The Call Center repeats this process for the next customers.
The attendant's channel (ALeg) is kept continously up.
Most of the time this setup works well but sometimes after
1500 calls received by the attendant its channel (ALeg) is
wrongly hanged up by the Freeswitch so here is the bug.
Studying your code I changed code in 2 points at the
switch_ivr_bridge.c file and 1 at the switch_ivr_originate.c file
that I think would fix this issue.

2 cases possible

Problem occurs when two legs were bridged and the remote side in
BLeg issues a BYE.
Assume Bleg call completed , uuid_bridge issued , received BYE in
BLeg with ALeg Transfer bit flag equal false , ALeg and BLeg in
CS_SOFT_EXECUTE
in the previous code ALeg channel call sometimes is hangedd up
even with hangup_after_bridge set to false, our correction hangup
channel only if hangup_after_bridge equal true or else it set
ALeg call state to CS_EXECUTE see code changes in
switch_ivr_bridge.c

Problem occurs when two legs were bridged and the remote side in
BLeg issues a BYE.
Bleg call was complete , uuid_bridge issued , received BYE in BLeg
when ALeg has Transfer flag bit value equal true.
in the previous code ALeg channel call sometimes is hanged up even
with hangup_after_bridge set to false, with our corretion hangup
channel only if hangup_after_bridge equal true see code changes in
switch_ivr_originate.c
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant