From 3b7b97bef6a66b37ce0db40653e91485accefded Mon Sep 17 00:00:00 2001 From: Sebastien Vincent Date: Wed, 18 May 2011 17:29:19 +0000 Subject: [PATCH] Adds modifications to correctly support the XEP-0262 (ZRTP). --- .../CallPeerMediaHandlerJabberImpl.java | 22 +++++++++++++++---- .../jingle/EncryptionPacketExtension.java | 13 +++++++++-- .../extensions/jingle/JingleIQProvider.java | 7 ++++++ .../jingle/ZrtpHashPacketExtension.java | 2 +- 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/CallPeerMediaHandlerJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/CallPeerMediaHandlerJabberImpl.java index 6a39937aa..eba1f3980 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/CallPeerMediaHandlerJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/CallPeerMediaHandlerJabberImpl.java @@ -289,7 +289,6 @@ public void processOffer(List offer) = content.getFirstChildOfType( IceUdpTransportPacketExtension.class); - // stream target MediaStreamTarget target = JingleUtils.extractDefaultTarget(content); @@ -347,12 +346,17 @@ public void processOffer(List offer) if(helloHash != null && helloHash[1].length() > 0) { + EncryptionPacketExtension encryption = new + EncryptionPacketExtension(); ZrtpHashPacketExtension hash = new ZrtpHashPacketExtension(); hash.setVersion(helloHash[0]); hash.setValue(helloHash[1]); - ourContent.addChildExtension(hash); + encryption.addChildExtension(hash); + RtpDescriptionPacketExtension rtpDescription = + JingleUtils.getRtpDescription(ourContent); + rtpDescription.setEncryption(encryption); } } @@ -550,13 +554,18 @@ private ContentPacketExtension createContent(MediaDevice dev) if(helloHash != null && helloHash[1].length() > 0) { + EncryptionPacketExtension encryption = new + EncryptionPacketExtension(); ZrtpHashPacketExtension hash = new ZrtpHashPacketExtension(); hash.setVersion(helloHash[0]); hash.setValue(helloHash[1]); - content.addChildExtension(hash); + encryption.addChildExtension(hash); + RtpDescriptionPacketExtension description = + JingleUtils.getRtpDescription(content); + description.setEncryption(encryption); } } @@ -670,12 +679,17 @@ public List createContentList() if(helloHash != null && helloHash[1].length() > 0) { + EncryptionPacketExtension encryption = new + EncryptionPacketExtension(); ZrtpHashPacketExtension hash = new ZrtpHashPacketExtension(); hash.setVersion(helloHash[0]); hash.setValue(helloHash[1]); - content.addChildExtension(hash); + encryption.addChildExtension(hash); + RtpDescriptionPacketExtension description = + JingleUtils.getRtpDescription(content); + description.setEncryption(encryption); } } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/EncryptionPacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/EncryptionPacketExtension.java index 6e7c96dcf..4084a690b 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/EncryptionPacketExtension.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/EncryptionPacketExtension.java @@ -21,6 +21,11 @@ public class EncryptionPacketExtension extends AbstractPacketExtension { + /** + * The namespace of the "encryption" element. + */ + public static final String NAMESPACE = null; + /** * The name of the "encryption" element. */ @@ -43,7 +48,7 @@ public class EncryptionPacketExtension */ public EncryptionPacketExtension() { - super(null, ELEMENT_NAME); + super(NAMESPACE, ELEMENT_NAME); } /** @@ -104,6 +109,10 @@ public boolean isRequired() @Override public List getChildExtensions() { - return getCryptoList(); + List ret = new ArrayList(); + + ret.addAll(getCryptoList()); + ret.addAll(super.getChildExtensions()); + return ret; } } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java index 245e2df72..658ec3dd4 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java @@ -57,6 +57,13 @@ public JingleIQProvider() new DefaultPacketExtensionProvider (RTPHdrExtPacketExtension.class)); + // provider + providerManager.addExtensionProvider( + EncryptionPacketExtension.ELEMENT_NAME, + EncryptionPacketExtension.NAMESPACE, + new DefaultPacketExtensionProvider + (EncryptionPacketExtension.class)); + // provider providerManager.addExtensionProvider( ZrtpHashPacketExtension.ELEMENT_NAME, diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/ZrtpHashPacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/ZrtpHashPacketExtension.java index 84aa34404..9cc4fe084 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/ZrtpHashPacketExtension.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/ZrtpHashPacketExtension.java @@ -24,7 +24,7 @@ public class ZrtpHashPacketExtension extends AbstractPacketExtension /** * The namespace for the "zrtp-hash" element. */ - public static final String NAMESPACE = "urn:xmpp:jingle:apps:rtp:zrtp:0"; + public static final String NAMESPACE = "urn:xmpp:jingle:apps:rtp:zrtp:1"; /** * The name of the version attribute.