core: do not create decryption error chat items for earlier messages (#2189)

* core: do not create decryption error chat items for earlier messages

* do not report earlier error, mobile items, fix tests
This commit is contained in:
Evgeny Poberezkin
2023-04-16 19:30:25 +02:00
committed by GitHub
parent 393238f47c
commit 5b4c183466
10 changed files with 31 additions and 29 deletions
+2 -2
View File
@@ -2820,19 +2820,19 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do
agentMsgDecryptError :: AgentErrorType -> Maybe (MsgDecryptError, Word32)
agentMsgDecryptError = \case
AGENT (A_CRYPTO RATCHET_HEADER) -> Just (MDERatchetHeader, 1)
AGENT (A_CRYPTO (RATCHET_EARLIER n)) -> Just (MDEEarlier, n + 1) -- 1 is added to account for the message that has A_DUPLICATE error
AGENT (A_CRYPTO (RATCHET_SKIPPED n)) -> Just (MDETooManySkipped, n)
-- we are not treating this as decryption error, as in many cases it happens as the result of duplicate or redundant delivery,
-- and we don't have a way to differentiate.
-- we could store the hashes of past messages in the agent, or delaying message deletion after ACK
-- A_DUPLICATE -> Nothing
-- earlier messages may be received in case of redundant delivery, and do not necessarily indicate an error
-- AGENT (A_CRYPTO (RATCHET_EARLIER n)) -> Nothing
_ -> Nothing
mdeUpdatedCI :: (MsgDecryptError, Word32) -> CChatItem c -> Maybe (ChatItem c 'MDRcv, CIContent 'MDRcv)
mdeUpdatedCI (mde', n') (CChatItem _ ci@ChatItem {content = CIRcvDecryptionError mde n})
| mde == mde' = case mde of
MDERatchetHeader -> r (n + n')
MDEEarlier -> r n -- the first error in a sequence has the largest number it's the number of messages to receive to catch up, keeping it
MDETooManySkipped -> r n' -- the numbers are not added as sequential MDETooManySkipped will have it incremented by 1
| otherwise = Nothing
where
+1 -5
View File
@@ -735,10 +735,7 @@ data CIContent (d :: MsgDirection) where
deriving instance Show (CIContent d)
data MsgDecryptError
= MDERatchetHeader
| MDEEarlier
| MDETooManySkipped
data MsgDecryptError = MDERatchetHeader | MDETooManySkipped
deriving (Eq, Show, Generic)
instance ToJSON MsgDecryptError where
@@ -954,7 +951,6 @@ msgDecryptErrorText err n =
where
errName = case err of
MDERatchetHeader -> "header"
MDEEarlier -> "earlier message"
MDETooManySkipped -> "too many skipped messages"
msgDirToModeratedContent_ :: SMsgDirection d -> CIContent d