aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/impl/media
diff options
context:
space:
mode:
authorWerner Dittmann <wernerd@java.net>2009-10-18 08:17:58 +0000
committerWerner Dittmann <wernerd@java.net>2009-10-18 08:17:58 +0000
commit81279054fd4b317edb473d5bcf6486fa1be042f1 (patch)
tree56dbcfd9f0675bfce4866f1b4fbe2a0b5d991224 /src/net/java/sip/communicator/impl/media
parent4268a877c9752967456772cbbc2e33200e2a476c (diff)
downloadjitsi-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/net/java/sip/communicator/impl/media')
-rw-r--r--src/net/java/sip/communicator/impl/media/CallSessionImpl.java15
-rw-r--r--src/net/java/sip/communicator/impl/media/transform/zrtp/ZRTPTransformEngine.java16
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())