You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Using ice4j has been mostly hit than miss, for our purposes. On some occasions of connectivity establishment, when only one side succeeds reaches IceProcessingState.COMPLETED status, the other side is stuck at this:
INFO: timeout for pair: 192.168.0.5:44356/udp/host -> 192.168.0.20:45338/udp/host (mote.RTP), failing.
Without the status properly updating to IceProcessingState.FAILED, an application cannot properly react, and, in the case of our app, remains stuck, waiting for a status that never comes. I see that this happens in the part of the code:
where it gets stuck when there is only one stream when Agent.checkListStatesUpdated() runs, because the stream is already failing, but is still considered running. This then enters the check
if (!allListsEnded)
{
return;
}
where it never gets to the part:
if (!atLeastOneListSucceeded)
{
//all lists ended but none succeeded. No love today ;(
if (logger.isLoggable(Level.INFO))
{
if (connCheckClient.isAlive()
|| connCheckServer.isAlive())
{
logger.info("Suspicious ICE connectivity failure. Checks" +
" failed but the remote end was able to reach us.");
}
logger.info("ICE state is FAILED");
}
terminate(IceProcessingState.FAILED);
return;
}
When we amended the faulty check to:
if (!allListsEnded && streams.size() > 1)
{
return;
}
it fixes the issue. I'm not sure if the amendment goes against intended design. Please advise.
Thanks.
P.S. On previous experiences there were more than one logged lines of
INFO: timeout for pair: 192.168.0.5:44356/udp/host -> 192.168.0.20:45338/udp/host (mote.RTP), failing.
for different pairs. I'm not sure if these pairs also had just one stream associated.
Edit:
I found that fix was naive, since processResponse also leads to the end method. I placed in another check for when it comes from processTimeout and it seems to work fine.
The text was updated successfully, but these errors were encountered:
Using ice4j has been mostly hit than miss, for our purposes. On some occasions of connectivity establishment, when only one side succeeds reaches IceProcessingState.COMPLETED status, the other side is stuck at this:
Without the status properly updating to IceProcessingState.FAILED, an application cannot properly react, and, in the case of our app, remains stuck, waiting for a status that never comes. I see that this happens in the part of the code:
where it gets stuck when there is only one stream when Agent.checkListStatesUpdated() runs, because the stream is already failing, but is still considered running. This then enters the check
where it never gets to the part:
When we amended the faulty check to:
it fixes the issue. I'm not sure if the amendment goes against intended design. Please advise.
Thanks.
P.S. On previous experiences there were more than one logged lines of
for different pairs. I'm not sure if these pairs also had just one stream associated.
Edit:
I found that fix was naive, since processResponse also leads to the end method. I placed in another check for when it comes from processTimeout and it seems to work fine.
The text was updated successfully, but these errors were encountered: