From c81c3e5ac5b4918c2ed14a796fe210be689696d4 Mon Sep 17 00:00:00 2001 From: Werner Dittmann Date: Sat, 31 Jan 2009 11:34:50 +0000 Subject: [PATCH] Add zrtp-hash attributes to the SDP media attributes. Each media (RTP session) has its own hash attribute because each session uses own keys to encrypt via SRTP. The hashes may be used according to the ZRTP spec, refer to chaps 8 and 10. --- .../impl/media/CallSessionImpl.java | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/net/java/sip/communicator/impl/media/CallSessionImpl.java b/src/net/java/sip/communicator/impl/media/CallSessionImpl.java index f07d5bd8c..74cd5dd42 100644 --- a/src/net/java/sip/communicator/impl/media/CallSessionImpl.java +++ b/src/net/java/sip/communicator/impl/media/CallSessionImpl.java @@ -1613,6 +1613,17 @@ private Vector createMediaDescriptions( onHold |= ON_HOLD_REMOTELY; } setAttributeOnHold(am, onHold); + + // check if ZRTP engine is used and set SDP attribute + TransformConnector transConnector = this.transConnectors + .get(audioRtpManager); + if (transConnector != null) { + TransformEngine engine = transConnector.getEngine(); + if (engine instanceof ZRTPTransformEngine) { + ZRTPTransformEngine ze = (ZRTPTransformEngine) engine; + am.setAttribute("zrtp-hash", ze.getHelloHash()); + } + } mediaDescs.add(am); } //--------Video media description @@ -1648,6 +1659,17 @@ private Vector createMediaDescriptions( onHold |= ON_HOLD_REMOTELY; } setAttributeOnHold(vm, onHold); + + // check if ZRTP engine is used and set SDP attribute + TransformConnector transConnector = this.transConnectors + .get(videoRtpManager); + if (transConnector != null) { + TransformEngine engine = transConnector.getEngine(); + if (engine instanceof ZRTPTransformEngine) { + ZRTPTransformEngine ze = (ZRTPTransformEngine) engine; + vm.setAttribute("zrtp-hash", ze.getHelloHash()); + } + } mediaDescs.add(vm); } @@ -1810,7 +1832,9 @@ private Hashtable> extractMediaEncodings( { MediaDescription mediaDescription = descriptionsIter.next(); + Media media = mediaDescription.getMedia(); + Vector mediaFormats = null; String mediaType = null; try @@ -1826,7 +1850,6 @@ private Hashtable> extractMediaEncodings( continue; } - if(mediaFormats.size() > 0) { List jmfEncodings = @@ -2080,10 +2103,6 @@ else if (rtpManager.equals(videoRtpManager)) { callback.setType(SecurityGUIEventZrtp.VIDEO); } // ZRTP engine initialization - // TODO: 1. must query/randomize/find a method for the zid file - // name - // 2. must define an exception for initialization failure - ZRTPTransformEngine engine = (ZRTPTransformEngine)transConnector.getEngine(); engine.setUserCallback(callback);