package info.guardianproject.otr; import info.guardianproject.otr.IOtrChatSession.Stub; import info.guardianproject.util.Debug; import net.java.otr4j.OtrException; import net.java.otr4j.session.SessionID; import net.java.otr4j.session.SessionStatus; import android.os.RemoteException; public class OtrChatSessionAdapter extends Stub { private OtrChatManager _chatManager; private String _localUser; private String _remoteUser; private SessionID _sessionId; public OtrChatSessionAdapter(String localUser, String remoteUser, OtrChatManager chatManager) { _chatManager = chatManager; _localUser = localUser; _remoteUser = remoteUser; _sessionId = chatManager.getSessionId(localUser, remoteUser); } public void startChatEncryption() throws RemoteException { Debug.wrapExceptions(new Runnable() { @Override public void run() { _chatManager.startSession(_localUser, _remoteUser); } }); } @Override public void stopChatEncryption() throws RemoteException { Debug.wrapExceptions(new Runnable() { @Override public void run() { _chatManager.endSession(_localUser, _remoteUser); } }); } @Override public boolean isChatEncrypted() throws RemoteException { return _chatManager.getSessionStatus(_localUser, _remoteUser) == SessionStatus.ENCRYPTED; } @Override public int getChatStatus() throws RemoteException { SessionStatus sessionStatus = _chatManager.getSessionStatus(_localUser, _remoteUser); if (sessionStatus == null) sessionStatus = SessionStatus.PLAINTEXT; return sessionStatus.ordinal(); } @Override public void initSmpVerification(String question, String secret) throws RemoteException { try { _chatManager.initSmp(_chatManager.getSessionId(_localUser, _remoteUser), question, secret); } catch (OtrException e) { OtrDebugLogger.log("initSmp", e); throw new RemoteException(); } } @Override public void respondSmpVerification(String answer) throws RemoteException { try { _chatManager.respondSmp(_chatManager.getSessionId(_localUser, _remoteUser), answer); } catch (OtrException e) { OtrDebugLogger.log("respondSmp", e); throw new RemoteException(); } } @Override public void verifyKey(String address) throws RemoteException { SessionID sessionId = _chatManager.getSessionId(_localUser, address); _chatManager.getKeyManager().verify(sessionId); } @Override public void unverifyKey(String address) throws RemoteException { SessionID sessionId = _chatManager.getSessionId(_localUser, address); _chatManager.getKeyManager().unverify(sessionId); } @Override public boolean isKeyVerified(String address) throws RemoteException { SessionID sessionId = _chatManager.getSessionId(_localUser, address); return _chatManager.getKeyManager().isVerified(sessionId); } @Override public String getLocalFingerprint() throws RemoteException { return _chatManager.getKeyManager().getLocalFingerprint(_sessionId); } @Override public String getRemoteFingerprint() throws RemoteException { SessionID sessionId = _chatManager.getSessionId(_localUser, _remoteUser); return _chatManager.getKeyManager().getRemoteFingerprint(sessionId); } @Override public void generateLocalKeyPair() throws RemoteException { _chatManager.getKeyManager().generateLocalKeyPair(_sessionId); } }