Search in sources :

Example 1 with CryptoEvent

use of org.matrix.androidsdk.crypto.interfaces.CryptoEvent in project matrix-android-sdk by matrix-org.

the class MXMegolmDecryption method addEventToPendingList.

/**
 * Add an event to the list of those we couldn't decrypt the first time we
 * saw them.
 *
 * @param event      the event to try to decrypt later
 * @param timelineId the timeline identifier
 */
private void addEventToPendingList(CryptoEvent event, String timelineId) {
    EncryptedEventContent encryptedEventContent = event.toEncryptedEventContent();
    String senderKey = encryptedEventContent.sender_key;
    String sessionId = encryptedEventContent.session_id;
    String k = senderKey + "|" + sessionId;
    // avoid undefined timelineId
    if (TextUtils.isEmpty(timelineId)) {
        timelineId = "";
    }
    if (!mPendingEvents.containsKey(k)) {
        mPendingEvents.put(k, new HashMap<String, List<CryptoEvent>>());
    }
    if (!mPendingEvents.get(k).containsKey(timelineId)) {
        mPendingEvents.get(k).put(timelineId, new ArrayList<CryptoEvent>());
    }
    if (mPendingEvents.get(k).get(timelineId).indexOf(event) < 0) {
        Log.d(LOG_TAG, "## addEventToPendingList() : add Event " + event.getEventId() + " in room id " + event.getRoomId());
        mPendingEvents.get(k).get(timelineId).add(event);
    }
}
Also used : CryptoEvent(org.matrix.androidsdk.crypto.interfaces.CryptoEvent) EncryptedEventContent(org.matrix.androidsdk.crypto.model.crypto.EncryptedEventContent) ArrayList(java.util.ArrayList) List(java.util.List)

Example 2 with CryptoEvent

use of org.matrix.androidsdk.crypto.interfaces.CryptoEvent in project matrix-android-sdk by matrix-org.

the class MXMegolmDecryption method onNewSession.

/**
 * Check if the some messages can be decrypted with a new session
 *
 * @param senderKey the session sender key
 * @param sessionId the session id
 */
public void onNewSession(String senderKey, String sessionId) {
    String k = senderKey + "|" + sessionId;
    Map<String, List<CryptoEvent>> pending = mPendingEvents.get(k);
    if (null != pending) {
        // Have another go at decrypting events sent with this session.
        mPendingEvents.remove(k);
        Set<String> timelineIds = pending.keySet();
        for (String timelineId : timelineIds) {
            List<CryptoEvent> events = pending.get(timelineId);
            for (CryptoEvent event : events) {
                MXEventDecryptionResult result = null;
                try {
                    result = decryptEvent(event, TextUtils.isEmpty(timelineId) ? null : timelineId);
                } catch (MXDecryptionException e) {
                    Log.e(LOG_TAG, "## onNewSession() : Still can't decrypt " + event.getEventId() + ". Error " + e.getMessage(), e);
                    event.setCryptoError(e.getCryptoError());
                }
                if (null != result) {
                    final CryptoEvent fEvent = event;
                    final MXEventDecryptionResult fResut = result;
                    mCrypto.getUIHandler().post(new Runnable() {

                        @Override
                        public void run() {
                            fEvent.setClearData(fResut);
                            mSession.getDataHandler().onEventDecrypted(fEvent);
                        }
                    });
                    Log.d(LOG_TAG, "## onNewSession() : successful re-decryption of " + event.getEventId());
                }
            }
        }
    }
}
Also used : CryptoEvent(org.matrix.androidsdk.crypto.interfaces.CryptoEvent) MXEventDecryptionResult(org.matrix.androidsdk.crypto.MXEventDecryptionResult) MXDecryptionException(org.matrix.androidsdk.crypto.MXDecryptionException) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

ArrayList (java.util.ArrayList)2 List (java.util.List)2 CryptoEvent (org.matrix.androidsdk.crypto.interfaces.CryptoEvent)2 MXDecryptionException (org.matrix.androidsdk.crypto.MXDecryptionException)1 MXEventDecryptionResult (org.matrix.androidsdk.crypto.MXEventDecryptionResult)1 EncryptedEventContent (org.matrix.androidsdk.crypto.model.crypto.EncryptedEventContent)1