Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Minor
-
Resolution: Fixed
-
Affects Version/s: None
-
Fix Version/s: None
-
Component/s: freeswitch-core
-
Labels:None
-
Environment:Windows 2008
-
Platform:Win32_64/VS
-
Uname:NA
-
CPU Info:NA
-
GCC Version:NA
-
FreeSWITCH GIT Revision:3aff2bdcbc1d927354e15b67e7d820466cecaf06
-
Reproduced with GIT HEAD?:Yes
Description
Hi,
I encountered a problem in this scenario:
A -- +----+ +-------+
B -- | FS | -- | PROXY |
+----+ +-------+
A, B registered users. The proxy routes back incoming requests to FS.
The dialplan for both incoming and outgoing calls to/from FS include "bypass_media=true".
For simulating the proxy, the call from internal profile is routed to the external profile. See attached dialplan.
If A forks a call to B and a non existing user ("B,NO-USER" in bridge command) and B answers, and then A presses hold then I get an error
2011-08-04 17:17:00.358955 [WARNING] sofia.c:5159 Re-INVITE to a no-media channel that is not in a bridge.
and the call is disconnected.
While investigating this problem, I think I found a logical error in call forking that
can lead to this error.
The problem is (I think) in switch_core_session_outgoing_channel() line 529 in the two lines:
switch_channel_set_variable(peer_channel, SWITCH_SIGNAL_BOND_VARIABLE, switch_core_session_get_uuid(session));
switch_channel_set_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE, switch_core_session_get_uuid(*new_session));
If the originate call is forked then switch_core_session_outgoing_channel() is called twice (or more)
before the channel is answered, and the result is that SWITCH_SIGNAL_BOND_VARIABLE for the originating channel
is overwritten, and will always contain the value of last outgoing channel.
If the non-last channel is answered, then the channel and peers SWITCH_SIGNAL_BOND_VARIABLE relationship is wrong.
This is why I get the error that the channel is not in a bridge, while obviously it is.
I still haven't found a quick solution for this problem.
Any help will be greatly appreciated.
See attached dialplan. Also define users 4001 and 4002.
Thanks,
Ron
I encountered a problem in this scenario:
A -- +----+ +-------+
B -- | FS | -- | PROXY |
+----+ +-------+
A, B registered users. The proxy routes back incoming requests to FS.
The dialplan for both incoming and outgoing calls to/from FS include "bypass_media=true".
For simulating the proxy, the call from internal profile is routed to the external profile. See attached dialplan.
If A forks a call to B and a non existing user ("B,NO-USER" in bridge command) and B answers, and then A presses hold then I get an error
2011-08-04 17:17:00.358955 [WARNING] sofia.c:5159 Re-INVITE to a no-media channel that is not in a bridge.
and the call is disconnected.
While investigating this problem, I think I found a logical error in call forking that
can lead to this error.
The problem is (I think) in switch_core_session_outgoing_channel() line 529 in the two lines:
switch_channel_set_variable(peer_channel, SWITCH_SIGNAL_BOND_VARIABLE, switch_core_session_get_uuid(session));
switch_channel_set_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE, switch_core_session_get_uuid(*new_session));
If the originate call is forked then switch_core_session_outgoing_channel() is called twice (or more)
before the channel is answered, and the result is that SWITCH_SIGNAL_BOND_VARIABLE for the originating channel
is overwritten, and will always contain the value of last outgoing channel.
If the non-last channel is answered, then the channel and peers SWITCH_SIGNAL_BOND_VARIABLE relationship is wrong.
This is why I get the error that the channel is not in a bridge, while obviously it is.
I still haven't found a quick solution for this problem.
Any help will be greatly appreciated.
See attached dialplan. Also define users 4001 and 4002.
Thanks,
Ron