mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-15 08:32:41 +00:00
An inbound event whose megolm session hadn't arrived yet was logged and dropped. The keys are usually merely in flight — a to-device m.room_key racing the room event — so the message was lost to a few hundred milliseconds. On NoSessionFound, wait 3s for the session to land; if it doesn't, send an m.room_key_request and wait 22s more, then decrypt and re-dispatch. A 55s budget bounds the whole recovery so a permanently-unreadable event can't pin a goroutine. Runs detached from the transaction context, which is cancelled the moment we ACK — long before keys could arrive. This duplicates cryptohelper.HandleEncrypted's own 3s/22s ladder on purpose: that path is gated on a /sync token in the context, which appservice transactions never carry, so wiring ch.ASEventProcessor would still drop these. Note this does not touch the separate stale-megolm case, where a quiet room stays unreadable until the sender's session rotates — no key request helps there, and it self-heals.
13 KiB
13 KiB