From ed449020b8bf7ceaa4ddaaef1718876c1c1a9baa Mon Sep 17 00:00:00 2001 From: HuuuuDaxia <2443930064@qq.com> Date: Wed, 20 Aug 2025 16:02:51 +0800 Subject: [PATCH] websocket support send empty message Signed-off-by: HuuuuDaxia <2443930064@qq.com> --- .../async_context/src/send_context.cpp | 4 +- .../async_context/src/server_send_context.cpp | 4 +- .../websocket_exec/src/websocket_exec.cpp | 2 +- .../src/websocket_server_exec.cpp | 37 +++++++++---------- utils/napi_utils/src/napi_utils.cpp | 7 ---- 5 files changed, 23 insertions(+), 31 deletions(-) diff --git a/frameworks/js/napi/websocket/async_context/src/send_context.cpp b/frameworks/js/napi/websocket/async_context/src/send_context.cpp index 40770c270..788b6d4a2 100644 --- a/frameworks/js/napi/websocket/async_context/src/send_context.cpp +++ b/frameworks/js/napi/websocket/async_context/src/send_context.cpp @@ -59,8 +59,8 @@ bool SendContext::HandleParseArrayBuffer(napi_value *params) NETSTACK_LOGD("SendContext data is ArrayBuffer"); size_t len = 0; void *mem = NapiUtils::GetInfoFromArrayBufferValue(GetEnv(), params[0], &len); - if (mem == nullptr || len == 0) { - NETSTACK_LOGE("no memory"); + if (mem == nullptr && len != 0) { + NETSTACK_LOGE("Get Info error"); return false; } // must have PRE and POST diff --git a/frameworks/js/napi/websocket/async_context/src/server_send_context.cpp b/frameworks/js/napi/websocket/async_context/src/server_send_context.cpp index a8c50668b..8362e9391 100644 --- a/frameworks/js/napi/websocket/async_context/src/server_send_context.cpp +++ b/frameworks/js/napi/websocket/async_context/src/server_send_context.cpp @@ -118,8 +118,8 @@ bool ServerSendContext::HandleParseArrayBuffer(napi_value *params) NETSTACK_LOGI("ServerSendContext data is ArrayBuffer"); size_t len = 0; void *mem = NapiUtils::GetInfoFromArrayBufferValue(GetEnv(), params[0], &len); - if (mem == nullptr || len == 0) { - NETSTACK_LOGE("no memory"); + if (mem == nullptr && len != 0) { + NETSTACK_LOGE("Get info error"); return false; } // must have PRE and POST diff --git a/frameworks/js/napi/websocket/websocket_exec/src/websocket_exec.cpp b/frameworks/js/napi/websocket/websocket_exec/src/websocket_exec.cpp index c77152762..3c2c92dd4 100644 --- a/frameworks/js/napi/websocket/websocket_exec/src/websocket_exec.cpp +++ b/frameworks/js/napi/websocket/websocket_exec/src/websocket_exec.cpp @@ -278,7 +278,7 @@ int WebSocketExec::LwsCallbackClientWritable(lws *wsi, lws_callback_reasons reas return -1; } auto sendData = userData->Pop(); - if (sendData.data == nullptr || sendData.length == 0) { + if (sendData.data == nullptr) { return HttpDummy(wsi, reason, user, in, len); } int sendLength = lws_write(wsi, reinterpret_cast(sendData.data) + LWS_SEND_BUFFER_PRE_PADDING, diff --git a/frameworks/js/napi/websocket/websocket_exec/src/websocket_server_exec.cpp b/frameworks/js/napi/websocket/websocket_exec/src/websocket_server_exec.cpp index 8b7181a0d..8cabf4525 100644 --- a/frameworks/js/napi/websocket/websocket_exec/src/websocket_server_exec.cpp +++ b/frameworks/js/napi/websocket/websocket_exec/src/websocket_server_exec.cpp @@ -480,7 +480,7 @@ int WebSocketServerExec::LwsCallbackServerWriteable(lws *wsi, lws_callback_reaso return -1; } auto sendData = clientUserData->Pop(); - if (sendData.data == nullptr || sendData.length == 0) { + if (sendData.data == nullptr) { NETSTACK_LOGE("send data is empty"); return HttpDummy(wsi, reason, user, in, len); } @@ -680,19 +680,26 @@ static napi_value ConvertWsBinaryMessageToJs(napi_env env, const WebSocketMessag } void *data = nullptr; napi_value arrayBuffer = NapiUtils::CreateArrayBuffer(env, msg->data.size(), &data); - if (data != nullptr && NapiUtils::ValueIsArrayBuffer(env, arrayBuffer) && - memcpy_s(data, msg->data.size(), msg->data.c_str(), msg->data.size()) >= 0) { - NapiUtils::SetNamedProperty(env, jsMsg, "data", arrayBuffer); - napi_value jsConn = NapiUtils::CreateObject(env); - if (NapiUtils::GetValueType(env, jsConn) != napi_object) { + if (!NapiUtils::ValueIsArrayBuffer(env, arrayBuffer)) { + return NapiUtils::GetUndefined(env); + } + if (msg->data.size() > 0) { + if (data == nullptr) { + return NapiUtils::GetUndefined(env); + } + if (memcpy_s(data, msg->data.size(), msg->data.c_str(), msg->data.size()) != EOK) { return NapiUtils::GetUndefined(env); } - NapiUtils::SetStringPropertyUtf8(env, jsConn, EVENT_KEY_CLIENT_IP, msg->connection.clientIP); - NapiUtils::SetUint32Property(env, jsConn, EVENT_KEY_CLIENT_PORT, msg->connection.clientPort); - NapiUtils::SetNamedProperty(env, jsMsg, EVENT_KEY_CONNECTION, jsConn); - return jsMsg; } - return NapiUtils::GetUndefined(env); + NapiUtils::SetNamedProperty(env, jsMsg, "data", arrayBuffer); + napi_value jsConn = NapiUtils::CreateObject(env); + if (NapiUtils::GetValueType(env, jsConn) != napi_object) { + return NapiUtils::GetUndefined(env); + } + NapiUtils::SetStringPropertyUtf8(env, jsConn, EVENT_KEY_CLIENT_IP, msg->connection.clientIP); + NapiUtils::SetUint32Property(env, jsConn, EVENT_KEY_CLIENT_PORT, msg->connection.clientPort); + NapiUtils::SetNamedProperty(env, jsMsg, EVENT_KEY_CONNECTION, jsConn); + return jsMsg; } static napi_value CreateServerBinaryMessagePara(napi_env env, void *callbackPara) @@ -917,10 +924,6 @@ void WebSocketServerExec::HandleServerRcvMessage(lws *wsi, EventManager *manager manager->AppendWsServerBinaryData(wsi, data, length); if (isFinal) { const std::string &msgFromManager = manager->GetWsServerBinaryData(wsi); - if (msgFromManager.empty()) { - NETSTACK_LOGE("msgFromManager is empty"); - return; - } auto msg = new WebSocketMessage; if (msg == nullptr) { return; @@ -936,10 +939,6 @@ void WebSocketServerExec::HandleServerRcvMessage(lws *wsi, EventManager *manager manager->AppendWsServerTextData(wsi, data, length); if (isFinal) { const std::string &msgFromManager = manager->GetWsServerTextData(wsi); - if (msgFromManager.empty()) { - NETSTACK_LOGE("msgFromManager is empty"); - return; - } auto msg = new WebSocketMessage; if (msg == nullptr) { return; diff --git a/utils/napi_utils/src/napi_utils.cpp b/utils/napi_utils/src/napi_utils.cpp index 47afe60d7..62c662674 100644 --- a/utils/napi_utils/src/napi_utils.cpp +++ b/utils/napi_utils/src/napi_utils.cpp @@ -422,10 +422,6 @@ bool ValueIsArrayBuffer(napi_env env, napi_value value) void *GetInfoFromArrayBufferValue(napi_env env, napi_value value, size_t *length) { - if (length == nullptr) { - return nullptr; - } - void *data = nullptr; NAPI_CALL(env, napi_get_arraybuffer_info(env, value, &data, length)); return data; @@ -433,9 +429,6 @@ void *GetInfoFromArrayBufferValue(napi_env env, napi_value value, size_t *length napi_value CreateArrayBuffer(napi_env env, size_t length, void **data) { - if (length == 0) { - return nullptr; - } napi_value result = nullptr; NAPI_CALL(env, napi_create_arraybuffer(env, length, data, &result)); return result; -- Gitee