From b017d72193b4236c2617f9aee7784c07fb306d7e Mon Sep 17 00:00:00 2001 From: fanqibing Date: Tue, 12 Nov 2024 11:54:23 +0800 Subject: [PATCH] netstack bug fix for tls_socket_server --- .../js/napi/tls/src/tls_socket_server.cpp | 7 +++++ .../tls_socket/include/tls_socket_server.h | 31 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/frameworks/js/napi/tls/src/tls_socket_server.cpp b/frameworks/js/napi/tls/src/tls_socket_server.cpp index 6e31a9512..243234642 100644 --- a/frameworks/js/napi/tls/src/tls_socket_server.cpp +++ b/frameworks/js/napi/tls/src/tls_socket_server.cpp @@ -1314,7 +1314,14 @@ void TLSSocketServer::Connection::CallOnMessageCallback(int32_t socketFd, const } if (CallBackfunc) { + while (!dataCache_->IsEmpty()) { + CacheInfo cache = dataCache_->Get(); + CallBackfunc(socketFd, cache.data, cache.remoteInfo); + } CallBackfunc(socketFd, data, remoteInfo); + } else { + CacheInfo cache = {data, remoteInfo}; + dataCache_->Set(cache); } } diff --git a/interfaces/innerkits/tls_socket/include/tls_socket_server.h b/interfaces/innerkits/tls_socket/include/tls_socket_server.h index 5d03f08f2..b1598db85 100644 --- a/interfaces/innerkits/tls_socket/include/tls_socket_server.h +++ b/interfaces/innerkits/tls_socket/include/tls_socket_server.h @@ -46,6 +46,10 @@ namespace OHOS { namespace NetStack { namespace TlsSocketServer { constexpr int USER_LIMIT = 10; +struct CacheInfo { + std::string data; + Socket::SocketRemoteInfo remoteInfo; +}; using OnMessageCallback = std::function; using OnCloseCallback = std::function; @@ -400,6 +404,32 @@ public: void CallOnErrorCallback(int32_t err, const std::string &errString); + class DataCache { + public: + + CacheInfo Get() + { + std::lock_guard l(mutex_); + CacheInfo cache = cacheDeque_.front(); + cacheDeque_.pop_front(); + return cache; + } + void Set(const CacheInfo &data) + { + std::lock_guard l(mutex_); + cacheDeque_.emplace_back(data); + } + bool IsEmpty() + { + std::lock_guard l(mutex_); + return cacheDeque_.empty(); + } + + private: + std::deque cacheDeque_; + std::mutex mutex_; + }; + TlsSocket::OnErrorCallback onErrorCallback_; private: @@ -433,6 +463,7 @@ public: std::shared_ptr eventManager_ = nullptr; int32_t clientID_ = 0; OnMessageCallback onMessageCallback_; + std::shared_ptr dataCache_ = std::make_shared(); }; private: -- Gitee