From ef9fad9cfd6cc07758b2bbd320c8d1f15be49888 Mon Sep 17 00:00:00 2001 From: Ingo Bauersachs <ingo@jitsi.org> Date: Sat, 8 Feb 2014 21:58:36 +0100 Subject: [PATCH] Let ZRTP childstreams report the verification status of the main stream --- .../transform/zrtp/SecurityEventManager.java | 45 +++++++++---------- .../transform/zrtp/ZrtpControlImpl.java | 7 +-- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/org/jitsi/impl/neomedia/transform/zrtp/SecurityEventManager.java b/src/org/jitsi/impl/neomedia/transform/zrtp/SecurityEventManager.java index 1e76e1bc..09519974 100644 --- a/src/org/jitsi/impl/neomedia/transform/zrtp/SecurityEventManager.java +++ b/src/org/jitsi/impl/neomedia/transform/zrtp/SecurityEventManager.java @@ -58,14 +58,14 @@ public class SecurityEventManager extends ZrtpUserCallback private final ZrtpControlImpl zrtpControl; /** - * A callback to the instance that created us. + * The event manager that belongs to the ZRTP master session. */ - private SrtpListener securityListener; + private SecurityEventManager masterEventManager; /** - * Is this a ZRTP DH (Master) session? + * A callback to the instance that created us. */ - private boolean isDHSession = false; + private SrtpListener securityListener; /** * The type of this session. @@ -89,7 +89,7 @@ public class SecurityEventManager extends ZrtpUserCallback /** * The class constructor. - * + * * @param zrtpControl that this manager is to be associated with. */ public SecurityEventManager(ZrtpControlImpl zrtpControl) @@ -109,13 +109,12 @@ public void setSessionType(MediaType sessionType) } /** - * Set the DH session flag. - * - * @param isDHSession the DH session flag. + * Sets the event manager that belongs to the ZRTP master session. + * @param master the event manager that belongs to the ZRTP master session. */ - public void setDHSession(boolean isDHSession) + void setMasterEventManager(SecurityEventManager master) { - this.isDHSession = isDHSession; + this.masterEventManager = master; } /* @@ -164,7 +163,7 @@ public void showSAS(String sas, boolean isVerified) */ public void setSASVerified(boolean isVerified) { - this.isSasVerified = sas != null && isVerified; + this.isSasVerified = getSecurityString() != null && isVerified; } /** @@ -209,17 +208,8 @@ public void showMessage(ZrtpCodes.MessageSeverity sev, // Multi-stream session don't have own SAS data if (inf == ZrtpCodes.InfoCodes.InfoSecureStateOn) { - if (isDHSession) - { - securityListener.securityTurnedOn( - sessionType, cipher, + securityListener.securityTurnedOn(sessionType, cipher, zrtpControl); - } - else - { - securityListener.securityTurnedOn(sessionType, cipher, - zrtpControl); - } } } else if (msgCode instanceof ZrtpCodes.WarningCodes) @@ -311,8 +301,7 @@ else if (msgCode instanceof ZrtpCodes.ZrtpErrorCodes) logger.debug( sessionTypeToString(sessionType) + ": ZRTP message: severity: " + sev + ", sub code: " - + msgCode + ", DH session: " + isDHSession + ", multi: " - + multiStreams); + + msgCode + ", multi: " + multiStreams); } } @@ -440,6 +429,11 @@ public void setSrtpListener(SrtpListener securityListener) */ public String getSecurityString() { + if (masterEventManager != null && masterEventManager != this) + { + return masterEventManager.sas; + } + return sas; } @@ -460,6 +454,11 @@ public String getCipherString() */ public boolean isSecurityVerified() { + if (masterEventManager != null && masterEventManager != this) + { + return masterEventManager.isSasVerified; + } + return isSasVerified; } diff --git a/src/org/jitsi/impl/neomedia/transform/zrtp/ZrtpControlImpl.java b/src/org/jitsi/impl/neomedia/transform/zrtp/ZrtpControlImpl.java index 98afb060..79f7414b 100644 --- a/src/org/jitsi/impl/neomedia/transform/zrtp/ZrtpControlImpl.java +++ b/src/org/jitsi/impl/neomedia/transform/zrtp/ZrtpControlImpl.java @@ -302,11 +302,13 @@ public void setMultistream(SrtpControl master) if(!(master instanceof ZrtpControlImpl)) throw new IllegalArgumentException("master is no ZRTP control"); + ZrtpControlImpl zm = (ZrtpControlImpl)master; ZRTPTransformEngine engine = getTransformEngine(); - engine.setMultiStrParams(((ZrtpControlImpl) master) - .getTransformEngine().getMultiStrParams()); + engine.setMultiStrParams(zm.getTransformEngine().getMultiStrParams()); engine.setEnableZrtp(true); + engine.getUserCallback().setMasterEventManager( + zm.getTransformEngine().getUserCallback()); } /** @@ -350,7 +352,6 @@ public void start(MediaType mediaType) if (masterSession) { zrtpAutoStart = true; - securityEventManager.setDHSession(true); // we know that audio is considered as master for zrtp securityEventManager.setSessionType(mediaType); -- GitLab