From 660ca6ddd808b22293cb06d1b4e51694190a4ab0 Mon Sep 17 00:00:00 2001 From: Krzysztof Jackiewicz Date: Wed, 17 May 2023 14:35:13 +0200 Subject: [PATCH] Drop all encryption requests upon disconnection If client disconnects before finishing the request the request should be removed from the map. Change-Id: I7bb0fa71b12f0a07bac5e62e5191bd9729829bfe --- src/manager/service/encryption-logic.cpp | 10 ++++++++++ src/manager/service/encryption-logic.h | 2 +- src/manager/service/encryption-service.cpp | 8 ++++++++ src/manager/service/encryption-service.h | 8 ++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/manager/service/encryption-logic.cpp b/src/manager/service/encryption-logic.cpp index e3cf1d6..6698317 100644 --- a/src/manager/service/encryption-logic.cpp +++ b/src/manager/service/encryption-logic.cpp @@ -54,6 +54,16 @@ void EncryptionLogic::Crypt(const CryptoRequest &request) } } +void EncryptionLogic::DropRequests(const ConnectionID& connectionID) +{ + for (auto it = m_requestsMap.begin(); it != m_requestsMap.end();) { + if (it->second.conn.counter == connectionID.counter) + it = m_requestsMap.erase(it); + else + it++; + } +} + void EncryptionLogic::KeyRetrieved(MsgKeyResponse response) { auto it = m_requestsMap.find(response.id); diff --git a/src/manager/service/encryption-logic.h b/src/manager/service/encryption-logic.h index 7ae1e00..65c9d0d 100644 --- a/src/manager/service/encryption-logic.h +++ b/src/manager/service/encryption-logic.h @@ -37,7 +37,7 @@ public: void Crypt(const CryptoRequest &request); void KeyRetrieved(MsgKeyResponse response); - + void DropRequests(const ConnectionID& connectionID); private: IEncryptionService &m_service; diff --git a/src/manager/service/encryption-service.cpp b/src/manager/service/encryption-service.cpp index f642870..d254be4 100644 --- a/src/manager/service/encryption-service.cpp +++ b/src/manager/service/encryption-service.cpp @@ -152,4 +152,12 @@ void EncryptionService::CustomHandle(const SecurityEvent &/*event*/) LogError("This should not happend! SecurityEvent was called on EncryptionService!"); } +void EncryptionService::CustomHandle(const CloseEvent &event) +{ + // call the default handler + ThreadService::Handle(event); + + m_logic.DropRequests(event.connectionID); +} + } /* namespace CKM */ diff --git a/src/manager/service/encryption-service.h b/src/manager/service/encryption-service.h index 264b0fc..27a007f 100644 --- a/src/manager/service/encryption-service.h +++ b/src/manager/service/encryption-service.h @@ -55,6 +55,13 @@ public: }); } + virtual void Event(const CloseEvent &event) + { + CreateEvent([this, event]() { + this->CustomHandle(event); + }); + } + void Start(); void Stop(); @@ -62,6 +69,7 @@ protected: // CustomHandle is used to bypass security check void CustomHandle(const ReadEvent &event); void CustomHandle(const SecurityEvent &event); + void CustomHandle(const CloseEvent &event); private: virtual void SetCommManager(CommMgr *manager); -- 2.7.4