diff options
author | Werner Dittmann <wernerd@java.net> | 2009-10-18 08:17:58 +0000 |
---|---|---|
committer | Werner Dittmann <wernerd@java.net> | 2009-10-18 08:17:58 +0000 |
commit | 81279054fd4b317edb473d5bcf6486fa1be042f1 (patch) | |
tree | 56dbcfd9f0675bfce4866f1b4fbe2a0b5d991224 /src | |
parent | 4268a877c9752967456772cbbc2e33200e2a476c (diff) | |
download | jitsi-81279054fd4b317edb473d5bcf6486fa1be042f1.zip jitsi-81279054fd4b317edb473d5bcf6486fa1be042f1.tar.gz jitsi-81279054fd4b317edb473d5bcf6486fa1be042f1.tar.bz2 |
Fix interoperability issue with Zfone3. Set the SSRC at the earliest possible time, start
ZRTP handshake only after SSRC is known to ZRTP. This modification disables half-duplex
(receive-only) RTP streams. This restriction may be lifted if "newmedia" goes into operation.
Diffstat (limited to 'src')
-rw-r--r-- | src/net/java/sip/communicator/impl/media/CallSessionImpl.java | 15 | ||||
-rw-r--r-- | src/net/java/sip/communicator/impl/media/transform/zrtp/ZRTPTransformEngine.java | 16 |
2 files changed, 28 insertions, 3 deletions
diff --git a/src/net/java/sip/communicator/impl/media/CallSessionImpl.java b/src/net/java/sip/communicator/impl/media/CallSessionImpl.java index 7f583df..bef762e 100644 --- a/src/net/java/sip/communicator/impl/media/CallSessionImpl.java +++ b/src/net/java/sip/communicator/impl/media/CallSessionImpl.java @@ -1427,8 +1427,21 @@ public class CallSessionImpl try { - rtpManager.createSendStream(dataSource, i); + SendStream sendStream = rtpManager.createSendStream(dataSource, i); + + TransformConnector transConnector = + this.transConnectors.get(rtpManager); + // If a ZRTP engine is availabe then set the SSRC of this stream + // currently ZRTP supports only one SSRC per engine + if (transConnector != null) + { + long ssrc = sendStream.getSSRC(); + + ZRTPTransformEngine engine + = (ZRTPTransformEngine) transConnector.getEngine(); + engine.setOwnSSRC(ssrc); + } logger.trace("Created a send stream for format " + format); } catch (Exception exc) diff --git a/src/net/java/sip/communicator/impl/media/transform/zrtp/ZRTPTransformEngine.java b/src/net/java/sip/communicator/impl/media/transform/zrtp/ZRTPTransformEngine.java index 0a6704a..2895246 100644 --- a/src/net/java/sip/communicator/impl/media/transform/zrtp/ZRTPTransformEngine.java +++ b/src/net/java/sip/communicator/impl/media/transform/zrtp/ZRTPTransformEngine.java @@ -481,6 +481,18 @@ public class ZRTPTransformEngine } /** + * Set the SSRC of the RTP transmitter stream. + * + * ZRTP fills the SSRC in the ZRTP messages. + * + * @param ssrc + */ + public void setOwnSSRC(long ssrc) { + ownSSRC = (int)(ssrc & 0xffffffff); + System.out.println("Own SSRC: " + ownSSRC); + } + + /** * The data output stream calls this method to transform outgoing * packets. * @@ -527,7 +539,7 @@ public class ZRTPTransformEngine { // Check if we need to start ZRTP - if (!started && enableZrtp) + if (!started && enableZrtp && ownSSRC != 0) { startZrtp(); } @@ -566,7 +578,7 @@ public class ZRTPTransformEngine * In any case return null because ZRTP packets must never reach * the application. */ - if (enableZrtp) + if (enableZrtp && ownSSRC != 0) { ZrtpRawPacket zPkt = new ZrtpRawPacket(pkt); if (!zPkt.checkCrc()) |