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);
}
}
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());
}
}
}
}
}
Aggregations