add infrastructure to encrypt while sending

This commit is contained in:
Bruno Windels 2020-09-03 15:36:48 +02:00
parent 5cafef96f5
commit b1226d9220
4 changed files with 24 additions and 2 deletions

View file

@ -121,7 +121,7 @@ export class SendScheduler {
}
this._sendRequests = [];
}
console.error("error for request", request);
console.error("error for request", err);
request.reject(err);
break;
}

View file

@ -88,6 +88,7 @@ export class Room extends EventEmitter {
// encryption got enabled
if (!this._summary.encryption && summaryChanges.encryption && !this._roomEncryption) {
this._roomEncryption = this._createRoomEncryption(this, summaryChanges.encryption);
this._sendQueue.enableEncryption(this._roomEncryption);
}
if (memberChanges.size) {
if (this._changedMembersDuringSync) {
@ -137,6 +138,7 @@ export class Room extends EventEmitter {
this._summary.load(summary);
if (this._summary.encryption) {
this._roomEncryption = this._createRoomEncryption(this, this._summary.encryption);
this._sendQueue.enableEncryption(this._roomEncryption);
}
// need to load members for name?
if (this._summary.needsHeroes) {

View file

@ -26,5 +26,12 @@ export class PendingEvent {
get remoteId() { return this._data.remoteId; }
set remoteId(value) { this._data.remoteId = value; }
get content() { return this._data.content; }
get needsEncryption() { return this._data.needsEncryption; }
get data() { return this._data; }
setEncrypted(type, content) {
this._data.eventType = type;
this._data.content = content;
this._data.needsEncryption = false;
}
}

View file

@ -33,6 +33,11 @@ export class SendQueue {
this._isSending = false;
this._offline = false;
this._amountSent = 0;
this._roomEncryption = null;
}
enableEncryption(roomEncryption) {
this._roomEncryption = roomEncryption;
}
async _sendLoop() {
@ -45,6 +50,13 @@ export class SendQueue {
if (pendingEvent.remoteId) {
continue;
}
if (pendingEvent.needsEncryption) {
const {type, content} = await this._sendScheduler.request(async hsApi => {
return await this._roomEncryption.encrypt(pendingEvent.eventType, pendingEvent.content, hsApi);
});
pendingEvent.setEncrypted(type, content);
await this._tryUpdateEvent(pendingEvent);
}
console.log("really sending now");
const response = await this._sendScheduler.request(hsApi => {
console.log("got sendScheduler slot");
@ -156,7 +168,8 @@ export class SendQueue {
queueIndex,
eventType,
content,
txnId: makeTxnId()
txnId: makeTxnId(),
needsEncryption: !!this._roomEncryption
});
console.log("_createAndStoreEvent: adding to pendingEventsStore");
pendingEventsStore.add(pendingEvent.data);