From fdcd5dec713f14d0b5f7d002ebaa41321dc9c011 Mon Sep 17 00:00:00 2001 From: Volker Birk Date: Wed, 29 Jul 2020 16:02:15 +0200 Subject: [PATCH] encrypt_message_for_self --- message_cache.cc | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ message_cache.hh | 21 +++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/message_cache.cc b/message_cache.cc index f23f60d..ae13058 100644 --- a/message_cache.cc +++ b/message_cache.cc @@ -55,6 +55,20 @@ namespace pEp { enc_format, flags); } + PEP_STATUS MessageCache::cache_encrypt_message_for_self( + PEP_SESSION session, + pEp_identity* target_id, + message *src, + stringlist_t* extra, + message **dst, + PEP_enc_format enc_format, + PEP_encrypt_flags_t flags + ) + { + return message_cache.encrypt_message_for_self(session, target_id, src, + extra, dst, enc_format, flags); + } + PEP_STATUS MessageCache::cache_release(const char *id) { try { @@ -391,5 +405,40 @@ namespace pEp { return status; } + + PEP_STATUS MessageCache::encrypt_message_for_self( + PEP_SESSION session, + pEp_identity* target_id, + message *src, + stringlist_t* extra, + message **dst, + PEP_enc_format enc_format, + PEP_encrypt_flags_t flags + ) + { + ::message *_msg; + { + std::lock_guard l(_mtx); + _msg = message_cache._cache.at(src->id).src; + } + + swapContent(src, _msg); + + ::message *_dst = nullptr; + PEP_STATUS status = ::encrypt_message_for_self(session, target_id, src, + extra, &_dst, enc_format, flags); + + swapContent(_msg, src); + + *dst = empty_message_copy(_dst); + + { + std::lock_guard l(_mtx); + ::free_message(message_cache._cache.at(src->id).dst); + message_cache._cache.at(src->id).dst = _dst; + } + + return status; + } }; diff --git a/message_cache.hh b/message_cache.hh index b29c501..e463391 100644 --- a/message_cache.hh +++ b/message_cache.hh @@ -57,6 +57,17 @@ namespace pEp { PEP_encrypt_flags_t flags ); + static PEP_STATUS cache_encrypt_message_for_self( + PEP_SESSION session, + pEp_identity* target_id, + message *src, + stringlist_t* extra, + message **dst, + PEP_enc_format enc_format, + PEP_encrypt_flags_t flags + ); + + static PEP_STATUS cache_release(const char *id); protected: @@ -93,6 +104,16 @@ namespace pEp { PEP_encrypt_flags_t flags ); + PEP_STATUS encrypt_message_for_self( + PEP_SESSION session, + pEp_identity* target_id, + message *src, + stringlist_t* extra, + message **dst, + PEP_enc_format enc_format, + PEP_encrypt_flags_t flags + ); + static ::message *empty_message_copy(::message *src); };