From e1b7f16d3e0f9f93676b316243ca74182728d732 Mon Sep 17 00:00:00 2001 From: Alexandre Lision <alexandre.lision@savoirfairelinux.com> Date: Wed, 26 Feb 2014 16:45:32 -0500 Subject: [PATCH] Clean up on SecureSipCall Refs #41441 --- src/org/sflphone/fragments/CallFragment.java | 83 +++++++++++-------- src/org/sflphone/model/Conference.java | 8 ++ src/org/sflphone/model/SecureSipCall.java | 59 ++++--------- .../sflphone/service/CallManagerCallBack.java | 8 +- 4 files changed, 78 insertions(+), 80 deletions(-) diff --git a/src/org/sflphone/fragments/CallFragment.java b/src/org/sflphone/fragments/CallFragment.java index 69b4c24f5..28b961834 100644 --- a/src/org/sflphone/fragments/CallFragment.java +++ b/src/org/sflphone/fragments/CallFragment.java @@ -263,34 +263,33 @@ public class CallFragment extends CallableWrapperFragment implements CallInterfa public void secureZrtpOn(Conference updated, String id) { Log.i(TAG, "secureZrtpOn"); mCallbacks.updateDisplayedConference(updated); + updateSecurityDisplay(); } @Override public void secureZrtpOff(Conference updated, String id) { Log.i(TAG, "secureZrtpOff"); mCallbacks.updateDisplayedConference(updated); + updateSecurityDisplay(); } @Override public void displaySAS(Conference updated, final String securedCallID) { Log.i(TAG, "displaySAS"); mCallbacks.updateDisplayedConference(updated); - SecureSipCall display = (SecureSipCall) getConference().getCallById(securedCallID); - enableZRTP(display); + updateSecurityDisplay(); } @Override public void zrtpNegotiationFailed(Conference c, String securedCallID) { mCallbacks.updateDisplayedConference(c); - SecureSipCall display = (SecureSipCall) getConference().getCallById(securedCallID); - enableZRTP(display); + updateSecurityDisplay(); } @Override public void zrtpNotSupported(Conference c, String securedCallID) { mCallbacks.updateDisplayedConference(c); - SecureSipCall display = (SecureSipCall) getConference().getCallById(securedCallID); - enableZRTP(display); + updateSecurityDisplay(); } @Override @@ -392,46 +391,60 @@ public class CallFragment extends CallableWrapperFragment implements CallInterfa dX = Math.cos(Math.toRadians(angle_part * i - 90)) * radiusCalls; dY = Math.sin(Math.toRadians(angle_part * i - 90)) * radiusCalls; getBubbleFor(partee, (int) (mBubbleModel.width / 2 + dX), (int) (mBubbleModel.height / 2 + dY)); - if (partee instanceof SecureSipCall) - enableZRTP((SecureSipCall) partee); } + updateSecurityDisplay(); mBubbleModel.clearAttractors(); } - private void enableZRTP(final SecureSipCall secured) { - Log.i(TAG, "enable ZRTP"); - switch (secured.displayModule()) { - case SecureSipCall.DISPLAY_GREEN_LOCK: - showLock(R.drawable.green_lock); - break; - case SecureSipCall.DISPLAY_RED_LOCK: - showLock(R.drawable.red_lock); - break; - case SecureSipCall.DISPLAY_CONFIRM_SAS: - final Button sas = (Button) mSecuritySwitch.findViewById(R.id.confirm_sas); - sas.setText("Confirm SAS: " + secured.getSAS()); - sas.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - try { - mCallbacks.getService().confirmSAS(secured.getCallId()); - showLock(R.drawable.green_lock); - } catch (RemoteException e) { - e.printStackTrace(); + private void updateSecurityDisplay() { + + //First we check if at least one participan use a security layer. + if (!getConference().useSecureLayer()) + return; + + Log.i(TAG, "Enable security display"); + if (getConference().hasMultipleParticipants()) { + //TODO What layout should we put? + } else { + final SecureSipCall secured = (SecureSipCall) getConference().getParticipants().get(0); + switch (secured.displayModule()) { + case SecureSipCall.DISPLAY_GREEN_LOCK: + Log.i(TAG, "DISPLAY_GREEN_LOCK"); + showLock(R.drawable.green_lock); + break; + case SecureSipCall.DISPLAY_RED_LOCK: + Log.i(TAG, "DISPLAY_RED_LOCK"); + showLock(R.drawable.red_lock); + break; + case SecureSipCall.DISPLAY_CONFIRM_SAS: + final Button sas = (Button) mSecuritySwitch.findViewById(R.id.confirm_sas); + Log.i(TAG, "Confirm SAS: " + secured.getSAS()); + sas.setText("Confirm SAS: " + secured.getSAS()); + sas.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try { + mCallbacks.getService().confirmSAS(secured.getCallId()); + showLock(R.drawable.green_lock); + } catch (RemoteException e) { + e.printStackTrace(); + } } - } - }); - mSecuritySwitch.setVisibility(View.VISIBLE); - break; - case SecureSipCall.DISPLAY_NONE: - break; + }); + mSecuritySwitch.setDisplayedChild(0); + mSecuritySwitch.setVisibility(View.VISIBLE); + break; + case SecureSipCall.DISPLAY_NONE: + break; + } } } private void showLock(int resId) { ImageView lock = (ImageView) mSecuritySwitch.findViewById(R.id.lock_image); lock.setImageDrawable(getResources().getDrawable(resId)); - mSecuritySwitch.showNext(); + Log.i(TAG, "mSecuritySwitch.getDisplayedChild(): " + mSecuritySwitch.getDisplayedChild()); + mSecuritySwitch.setDisplayedChild(1); mSecuritySwitch.setVisibility(View.VISIBLE); } diff --git a/src/org/sflphone/model/Conference.java b/src/org/sflphone/model/Conference.java index 7c8c6440a..57581ba6b 100644 --- a/src/org/sflphone/model/Conference.java +++ b/src/org/sflphone/model/Conference.java @@ -54,6 +54,14 @@ public class Conference implements Parcelable { participants.remove(toRemove); } + public boolean useSecureLayer() { + for(SipCall call : participants){ + if(call.getAccount().useSecureLayer()) + return true; + } + return false; + } + public interface state { int ACTIVE_ATTACHED = 0; int ACTIVE_DETACHED = 1; diff --git a/src/org/sflphone/model/SecureSipCall.java b/src/org/sflphone/model/SecureSipCall.java index 9932f9823..82feacad9 100644 --- a/src/org/sflphone/model/SecureSipCall.java +++ b/src/org/sflphone/model/SecureSipCall.java @@ -34,11 +34,7 @@ package org.sflphone.model; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; -import android.os.RemoteException; import android.util.Log; -import android.view.View; -import android.widget.Button; -import org.sflphone.R; public class SecureSipCall extends SipCall { @@ -52,17 +48,9 @@ public class SecureSipCall extends SipCall { public final static int DISPLAY_CONFIRM_SAS = 2; public final static int DISPLAY_NONE = 3; - private boolean sdesIsOn; - private boolean rtpFallback; - /* - * - srtp: - enable: false - keyExchange: sdes - rtpFallback: false - stunEnabled: false - stunServer: + private boolean sdesIsOn; +/* tls: calist: certificate: @@ -77,26 +65,12 @@ public class SecureSipCall extends SipCall { tlsPort: 5061 verifyClient: true verifyServer: true - - zrtp: - displaySas: true - displaySasOnce: false - helloHashEnabled: true - notSuppWarning: true - - * - * - * - * */ +*/ private String SAS; private boolean needSASConfirmation; - public boolean supportZRTP() { - return !zrtpNotSupported; - } - - private boolean zrtpNotSupported; + private boolean zrtpIsSupported; // static preferences of account private final boolean displaySas; @@ -110,10 +84,11 @@ public class SecureSipCall extends SipCall { super(call); isInitialized = false; displaySas = secure.getBoolean(SecureSipCall.DISPLAY_SAS, false); - needSASConfirmation = false; + needSASConfirmation = displaySas; + Log.i("SecureSipCall", "needSASConfirmation " + needSASConfirmation); alertIfZrtpNotSupported = secure.getBoolean(SecureSipCall.DISPLAY_WARNING_ZRTP_NOT_SUPPORTED, false); displaySASOnHold = secure.getBoolean(SecureSipCall.DISPLAY_SAS_ONCE, false); - zrtpNotSupported = false; + zrtpIsSupported = false; sdesIsOn = false; } @@ -136,7 +111,7 @@ public class SecureSipCall extends SipCall { isInitialized = in.readByte() == 1; alertIfZrtpNotSupported = in.readByte() == 1; displaySASOnHold = in.readByte() == 1; - zrtpNotSupported = in.readByte() == 1; + zrtpIsSupported = in.readByte() == 1; needSASConfirmation = in.readByte() == 1; sdesIsOn = in.readByte() == 1; } @@ -149,7 +124,7 @@ public class SecureSipCall extends SipCall { out.writeByte((byte) (isInitialized ? 1 : 0)); out.writeByte((byte) (alertIfZrtpNotSupported ? 1 : 0)); out.writeByte((byte) (displaySASOnHold ? 1 : 0)); - out.writeByte((byte) (zrtpNotSupported ? 1 : 0)); + out.writeByte((byte) (zrtpIsSupported ? 1 : 0)); out.writeByte((byte) (needSASConfirmation ? 1 : 0)); out.writeByte((byte) (sdesIsOn ? 1 : 0)); } @@ -168,13 +143,10 @@ public class SecureSipCall extends SipCall { // Not used } - public void setZrtpNotSupported(boolean zrtpNotSupported) { - needSASConfirmation = false; - this.zrtpNotSupported = zrtpNotSupported; - } - - public boolean isInitialized() { - return isInitialized; + public void setZrtpSupport(boolean support) { + zrtpIsSupported = support; + if(!support) + needSASConfirmation = false; } public void setInitialized() { @@ -185,10 +157,11 @@ public class SecureSipCall extends SipCall { * returns what state should be visible during call */ public int displayModule() { - if (isInitialized()) { + if (isInitialized) { + Log.i("SecureSIp", "needSASConfirmation"+needSASConfirmation); if (needSASConfirmation) { return DISPLAY_CONFIRM_SAS; - } else if (!zrtpNotSupported || sdesIsOn) { + } else if (zrtpIsSupported || sdesIsOn) { return DISPLAY_GREEN_LOCK; } else { return DISPLAY_RED_LOCK; diff --git a/src/org/sflphone/service/CallManagerCallBack.java b/src/org/sflphone/service/CallManagerCallBack.java index 6012aae2e..cc14c2f53 100644 --- a/src/org/sflphone/service/CallManagerCallBack.java +++ b/src/org/sflphone/service/CallManagerCallBack.java @@ -284,6 +284,7 @@ public class CallManagerCallBack extends Callback { Intent intent = new Intent(ZRTP_ON); SecureSipCall call = (SecureSipCall) mService.getCallById(callID); call.setInitialized(); + call.setZrtpSupport(true); intent.putExtra("callID", callID); intent.putExtra("conference", mService.findConference(callID)); mService.sendBroadcast(intent); @@ -294,6 +295,9 @@ public class CallManagerCallBack extends Callback { Log.i(TAG, "on_secure_zrtp_off"); Intent intent = new Intent(ZRTP_OFF); intent.putExtra("callID", callID); + SecureSipCall call = (SecureSipCall) mService.getCallById(callID); + call.setInitialized(); + call.setZrtpSupport(false); intent.putExtra("conference", mService.findConference(callID)); mService.sendBroadcast(intent); } @@ -319,7 +323,7 @@ public class CallManagerCallBack extends Callback { Intent intent = new Intent(ZRTP_NOT_SUPPORTED); SecureSipCall call = (SecureSipCall) mService.getCallById(callID); call.setInitialized(); - call.setZrtpNotSupported(true); + call.setZrtpSupport(false); intent.putExtra("callID", callID); intent.putExtra("conference", mService.findConference(callID)); mService.sendBroadcast(intent); @@ -331,7 +335,7 @@ public class CallManagerCallBack extends Callback { Intent intent = new Intent(ZRTP_NEGOTIATION_FAILED); SecureSipCall call = (SecureSipCall) mService.getCallById(callID); call.setInitialized(); - call.setZrtpNotSupported(true); + call.setZrtpSupport(false); intent.putExtra("callID", callID); intent.putExtra("conference", mService.findConference(callID)); mService.sendBroadcast(intent); -- GitLab