-
Notifications
You must be signed in to change notification settings - Fork 232
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
ice4j 3.0 does not generate the IPv4 srflx candidate when android device APN is set to IPv4/IPv6 #255
Comments
After further investigation, below are my findings that give rise to the problems: When the android mobile APN is set to IPv4/IPv6, it is found that all the user defined STUN servers FQDN host names are also resolved to IPv6 addresses. Therefore with the below 3 discovered Host candidates, except for the first IPv6 candidate, the user defined STUN servers are not reachable with the other two IPv4 candidates.
However the STUN server returns a redundant srflx candidate on STUN request for the first IPv6 public address, hence it is discarded. Currently, the problem can be resolved when the user entered the STUN server with an actual IP address e.g. STUN harvester(srvr: 172.217.213.127:19302/udp). No sure if there is any way to force android device to return both IPv4 and IPv6 addresses for a user defined FQDN STUN host name; when the device mobile APN = IPv4/IPv6. Found that android chrome browser is able to show both IPv4 and IPv6 addresses for the device public IP. |
Found the solution with implementing the following function in IceUdpTransportManager.
|
I've encountered the same problem in my self hosted jitsi. But in current JVB version, getTransportAddress can not be found any more. Did you upgrade your jvb and found the new solution? Looing forward to your reply eagerly and thx a lot in advance! |
See https://sanctum9.wordpress.com/2019/03/15/switch-to-ipv6-on-android/ on how to change network APN on android device.
The problem is observed with android device Note-10+ when the network APN is set to both 'IPv4/IPv6' (default);
The observation is performed on ice4j v3.0-55-g32a8aad on aTalk between Note-10 and SM-J730GM android devices. The HostCandidateHarvester#harvest() returns 3 host candidates containing an IPv6 public address.
when this happen, the jingle:transports:ice-udp stanza contains only the following candidates with srflx candidate missing.
Because of the missing srflx candidate, the call setup failed.
Not sure if there is such thing as IPv6 srflx candidate; or even work on android device that supports only IPv4 address if so.
Running conversations on Note-10+, it sends all the above candidates, and also the srflx candidate with IPv4 public address i.e.
<candidate foundation='3' component='1' protocol='udp' priority='1677724415' generation='0' id='11' ip='119.56.100.180' port='5002' type='srflx' rel-addr='10.143.27.57' rel-port='5002' network='0'/>
However when network APN is set to IPv4 only; then host candidates and jingle:transports:ice-udp contents are captured as below.
It is found that the transport candidate now contains the candidate type srflx, then the call setup is successfully.
The text was updated successfully, but these errors were encountered: