[jitsi-users] Various connectivity and usage issues


#1

Hi all,

I've recently been looking into Jitsi as a replacement for Skype, and
it's looking wonderfully promising - thank you to all who have
contributed to it!

There are several issues I'd like to raise:

(a) I can't seem to get a connection between NAT'd hosts on two
different LANs I manage. The NATing is being performed by Linux's
iptables (via masquerading) on the gateway machines for both
LANs. Pictorially:

+---------+ \

Host A | |

+---------+ |
     > +-- LAN 1
+-----------+ |

Gateway B | |

+-----------+ /

···

+----------+

Internet |

+----------+
     >
+-----------+ \

Gateway C | |

+-----------+ |
     > +-- LAN 2
+--------+ |

Host D | |

+--------+ /

Configuring both gateway machines to have the iptables rule:

-A FORWARD -p udp -m multiport --ports 1024:65535 -j ACCEPT

allows one to make and receive calls from/to either of those LANs to
a non-NAT'd third party elsewhere on the Internet; but attempts to
make calls between these two LANs results in ICE failures. What am I
missing?

(b) More generally, can the above iptables rule be made more specific,
e.g. specifying particular source and destination ports / port ranges,
rather than the above generic port range?

(c) Something in the ICE harvesting process is taking 60 seconds to
timeout, so that it takes at least that long for either the "Ringing"
process to be initiated (upon ICE success) or to report ICE
failure. Relevant log extracts are appended to the end of this email.

(d) In GTalk-based interactions between a host on one of the above
LANs and the abovementioned third party (who I'll refer to as 'E'),
only one person will have icons in the Jisti roster display enabling
them to make voice/video calls. So if I log in to GTalk on Host A, and
then E logs in to GTalk in Jitsi on their own box, their roster in
Jitsi will show the icons enabling them to make a voice and/or video
call, whereas my roster won't. Conversely: if E logs in to GTalk in
Jitsi, and then I log in to GTalk in Jitsi on Host A, the voice/video
icons will be displayed for me, but not for E. The voice/video icons
are still available when one opens a chat window, however, and seem to
work.

(e) One of the hosts I manage is a laptop in which the built-in Webcam
has been installed upside-down. :-/ With this host, a freestanding USB
Webcam is used. Jitsi recognises its existence, but no image data is
displayed. (It works fine in Skype.) Even if this issue could
be fixed, how difficult would it be to add vertical/horizontal video
flip functionality to Jitsi? I've tried using v4l2ucp to do vertical
flipping, but that doesn't seem to influence video output in either
Skype or Jitsi (even though logs seem to indicate that Jitsi does make
use of the v4l2 subsystem).

If there's any further information I can provide regarding any of the
above, please let me know!

Thanks in anticipation,

Alexis.

--- BEGIN LOG EXTRACT ---

20:33:49.662 INFO: [22] impl.protocol.jabber.TransportManagerGTalkImpl.createAgent().442 Found Google STUN server STUN harvester for srvr: stun.l.google.com/74.125.31.127:19302/udp
20:33:50.623 INFO: [22] impl.protocol.jabber.TransportManagerGTalkImpl.createAgent().411 Google TURN descriptor
20:33:50.623 INFO: [22] impl.protocol.jabber.TransportManagerGTalkImpl.createAgent().418 new Google TURN harvester
20:33:50.625 INFO: [22] impl.protocol.jabber.TransportManagerGTalkImpl.createAgent().411 Google TURN descriptor
20:33:50.625 INFO: [22] impl.protocol.jabber.TransportManagerGTalkImpl.createAgent().418 new Google TURN harvester
20:33:50.625 INFO: [22] impl.protocol.jabber.TransportManagerGTalkImpl.createAgent().411 Google TURN descriptor
20:33:50.625 INFO: [22] impl.protocol.jabber.TransportManagerGTalkImpl.createAgent().418 new Google TURN harvester
20:33:50.628 INFO: [22] impl.protocol.jabber.CallPeerMediaHandlerJabberImpl.harvestCandidates().1079 End candidate harvest within 1 ms
20:33:50.628 INFO: [23] org.ice4j.ice.Agent.createMediaStream() Create media stream for audio
20:33:50.634 INFO: [23] org.ice4j.ice.Agent.createComponent() Create component audio.1
20:33:50.635 INFO: [23] org.ice4j.ice.Agent.gatherCandidates() Gather candidates for component audio.1
20:33:50.640 INFO: [23] org.ice4j.ice.harvest.HostCandidateHarvester.harvest() End candidate harvest within 5 ms, for org.ice4j.ice.harvest.HostCandidateHarvester, component: 1
20:33:50.641 INFO: [23] org.ice4j.ice.harvest.HostCandidateHarvester.harvest() End candidate harvest within 6 ms, for org.ice4j.ice.harvest.HostCandidateHarvester, component: 1
20:33:50.642 INFO: [24] impl.protocol.jabber.JingleNodesHarvester.harvest().79 harvest Jingle Nodes
20:33:50.643 INFO: [24] org.ice4j.ice.harvest.CandidateHarvesterSet.harvest() End candidate harvest within 1 ms, for net.java.sip.communicator.impl.protocol.jabber.JingleNodesHarvester, component: 1
20:33:50.643 INFO: [24] org.ice4j.ice.harvest.CandidateHarvesterSet.setEnabled() disabling harvester: net.java.sip.communicator.impl.protocol.jabber.JingleNodesHarvester@30fb71
20:33:50.868 INFO: [25] org.ice4j.ice.harvest.StunCandidateHarvester.harvest() harvest / stream.component: STUN harvester for srvr: stun.l.google.com/74.125.31.127:19302/udp / audio / 1found 1 candidates.
20:33:50.868 INFO: [25] org.ice4j.ice.harvest.CandidateHarvesterSet.harvest() End candidate harvest within 226 ms, for org.ice4j.ice.harvest.StunCandidateHarvester, component: 1
20:33:50.871 INFO: [26] org.ice4j.ice.harvest.GoogleTurnCandidateHarvest.processSuccess() Successful Google TURN allocate
20:33:50.871 INFO: [27] org.ice4j.ice.harvest.StunCandidateHarvester.harvest() harvest / stream.component: STUN harvester for srvr: /173.194.72.127:19305/udp / audio / 1found 1 candidates.
20:33:50.872 INFO: [27] org.ice4j.ice.harvest.CandidateHarvesterSet.harvest() End candidate harvest within 230 ms, for org.ice4j.ice.harvest.GoogleTurnCandidateHarvester, component: 1
20:33:51.191 INFO: [26] org.ice4j.ice.harvest.GoogleTurnCandidateHarvest.processSuccess() Successful Google TURN allocate
20:33:51.191 INFO: [28] org.ice4j.ice.harvest.StunCandidateHarvester.harvest() harvest / stream.component: STUN harvester for srvr: /173.194.72.127:443/tcp / audio / 1found 1 candidates.
20:33:51.192 INFO: [28] org.ice4j.ice.harvest.CandidateHarvesterSet.harvest() End candidate harvest within 550 ms, for org.ice4j.ice.harvest.GoogleTurnSSLCandidateHarvester, component: 1
20:34:13.470 WARNING: [29] org.ice4j.stack.Connector.run() Connector died: /192.168.1.30:56787/tcp
java.net.SocketException: read failed
  at org.ice4j.socket.DelegatingSocket.receiveFromNetwork(DelegatingSocket.java:892)
  at org.ice4j.socket.DelegatingSocket.receive(DelegatingSocket.java:834)
  at org.ice4j.socket.MultiplexingSocket.receive(MultiplexingSocket.java:350)
  at org.ice4j.socket.MultiplexingSocket.receive(MultiplexingSocket.java:292)
  at org.ice4j.socket.MultiplexedSocket.receive(MultiplexedSocket.java:135)
  at org.ice4j.socket.IceTcpSocketWrapper.receive(IceTcpSocketWrapper.java:84)
  at org.ice4j.stack.Connector.run(Connector.java:175)
  at java.lang.Thread.run(Thread.java:679)
20:34:13.471 WARNING: [29] org.ice4j.stack.NetAccessManager.handleFatalError() Removing connector:ice4j.Connector@/192.168.1.30:56787/tcp status: running
java.net.SocketException: read failed
  at org.ice4j.socket.DelegatingSocket.receiveFromNetwork(DelegatingSocket.java:892)
  at org.ice4j.socket.DelegatingSocket.receive(DelegatingSocket.java:834)
  at org.ice4j.socket.MultiplexingSocket.receive(MultiplexingSocket.java:350)
  at org.ice4j.socket.MultiplexingSocket.receive(MultiplexingSocket.java:292)
  at org.ice4j.socket.MultiplexedSocket.receive(MultiplexedSocket.java:135)
  at org.ice4j.socket.IceTcpSocketWrapper.receive(IceTcpSocketWrapper.java:84)
  at org.ice4j.stack.Connector.run(Connector.java:175)
  at java.lang.Thread.run(Thread.java:679)
20:34:53.725 INFO: [30] org.ice4j.ice.harvest.StunCandidateHarvester.getHostCandidate() Exception TCP client connect: java.net.ConnectException: Connection timed out
20:34:53.725 INFO: [30] org.ice4j.ice.harvest.StunCandidateHarvester.startResolvingCandidate() server/candidate address type mismatch, skipping candidate in this harvester
20:34:53.725 INFO: [30] org.ice4j.ice.harvest.StunCandidateHarvester.harvest() harvest / stream.component: STUN harvester for srvr: /173.194.72.127:19305/tcp / audio / 1found 0 candidates.
20:34:53.726 INFO: [30] org.ice4j.ice.harvest.CandidateHarvesterSet.harvest() End candidate harvest within 63084 ms, for org.ice4j.ice.harvest.GoogleTurnCandidateHarvester, component: 1
20:34:53.726 INFO: [30] org.ice4j.ice.harvest.CandidateHarvesterSet.setEnabled() disabling harvester: STUN harvester for srvr: /173.194.72.127:19305/tcp
20:34:53.726 INFO: [23] org.ice4j.ice.Agent.gatherCandidates() End candidate harvest for all harvesters within 63091 ms, component: 1

--- END LOG EXTRACT ---