Delete session *before* sending EndSession message
Typically we're sending an EndSession message because our session has diverged from the remote party's session. So if we send an EndSession message, but decrypt it with our old out-of-sync session, how can we expect them to be able to decrypt it? Instead, by deleting the existing sessions, we'll fetch a new PreKey, and start fresh with the remote side. // FREEBIE
This commit is contained in:
parent
9d0c76ca56
commit
d8ae941736
|
@ -25,12 +25,16 @@ class SessionResetJob: NSObject {
|
||||||
func run() {
|
func run() {
|
||||||
Logger.info("\(TAG) Local user reset session.")
|
Logger.info("\(TAG) Local user reset session.")
|
||||||
|
|
||||||
let endSessionMessage = EndSessionMessage(timestamp:NSDate.ows_millisecondTimeStamp(), in: thread)
|
OWSDispatch.sessionStoreQueue().async {
|
||||||
|
self.storageManager.deleteAllSessions(forContact: self.recipientId)
|
||||||
|
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
let endSessionMessage = EndSessionMessage(timestamp:NSDate.ows_millisecondTimeStamp(), in: self.thread)
|
||||||
|
|
||||||
self.messageSender.send(endSessionMessage, success: {
|
self.messageSender.send(endSessionMessage, success: {
|
||||||
Logger.info("\(self.TAG) successfully sent EndSession<essage.")
|
Logger.info("\(self.TAG) successfully sent EndSession<essage.")
|
||||||
|
|
||||||
Logger.info("\(self.TAG) deleting sessions for recipient: \(self.recipientId)")
|
Logger.info("\(self.TAG) deleting sessions for recipient: \(self.recipientId)")
|
||||||
self.storageManager.deleteAllSessions(forContact: self.recipientId)
|
|
||||||
|
|
||||||
let message = TSInfoMessage(timestamp: NSDate.ows_millisecondTimeStamp(),
|
let message = TSInfoMessage(timestamp: NSDate.ows_millisecondTimeStamp(),
|
||||||
in: self.thread,
|
in: self.thread,
|
||||||
|
@ -40,6 +44,8 @@ class SessionResetJob: NSObject {
|
||||||
Logger.error("\(self.TAG) failed to send EndSesionMessage with error: \(error.localizedDescription)")
|
Logger.error("\(self.TAG) failed to send EndSesionMessage with error: \(error.localizedDescription)")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class func run(contactThread: TSContactThread, messageSender: MessageSender, storageManager: TSStorageManager) {
|
class func run(contactThread: TSContactThread, messageSender: MessageSender, storageManager: TSStorageManager) {
|
||||||
let job = self.init(recipientId: contactThread.contactIdentifier(),
|
let job = self.init(recipientId: contactThread.contactIdentifier(),
|
||||||
|
|
Loading…
Reference in New Issue