This commit is contained in:
Evgeny Poberezkin
2024-05-03 19:44:45 +01:00
parent 15ef808e8e
commit aae45e91b9
3 changed files with 10 additions and 11 deletions
+1 -1
View File
@@ -2240,7 +2240,7 @@ processSMPTransmission c@AgentClient {smpClients, subQ} (tSess@(_, srv, _), _v,
((&&) <$> hasPendingSubscription c connId <*> activeClientSession c tSess sessId)
(True <$ addSubscription c rq)
(pure False)
when added . notify $ UP srv [connId]
when (added && isResponse) $ notify $ UP srv [connId]
decryptClientMessage :: C.DhSecretX25519 -> SMP.ClientMsgEnvelope -> AM (SMP.PrivHeader, AgentMsgEnvelope)
decryptClientMessage e2eDh SMP.ClientMsgEnvelope {cmNonce, cmEncBody} = do
+9 -7
View File
@@ -1177,20 +1177,22 @@ subscribeQueues c qs = do
subscribeQueues_ :: Env -> TVar (Maybe SessionId) -> SMPClient -> NonEmpty RcvQueue -> IO (BatchResponses SMPClientError ())
subscribeQueues_ env session smp qs' = do
rs <- sendBatch subscribeSMPQueues smp qs'
let tSess = transportSession' smp
sessId = sessionId $ thParams smp
active <-
active <-
atomically $
ifM
(activeClientSession c tSess sessId)
(writeTVar session (Just sessId) >> mapM_ (uncurry $ processSubResult c) rs $> True)
(pure False)
when (active || hasTempErrors rs) $
resubscribeSMPSession c tSess `runReaderT` env
unless active $ logWarn "subcription batch result for replaced SMP client, resubscribing"
pure rs
if active
then when (hasTempErrors rs) resubscribe $> rs
else do
unless active $ logWarn "subcription batch result for replaced SMP client, resubscribing"
resubscribe $> L.map (second $ \_ -> Left PCENetworkError) rs
where
tSess = transportSession' smp
sessId = sessionId $ thParams smp
hasTempErrors = any (either temporaryClientError (const False) . snd)
resubscribe = resubscribeSMPSession c tSess `runReaderT` env
activeClientSession :: AgentClient -> SMPTransportSession -> SessionId -> STM Bool
activeClientSession c tSess sessId = sameSess <$> tryReadSessVar tSess (smpClients c)