diff --git a/baselib/msglib/src/standard/messenger_device_session_manager.c b/baselib/msglib/src/standard/messenger_device_session_manager.c index c2335f84db637a62fd5b6c6a60a7aa217682244e..3f1d2a47ca5b9881d143bcfd30eb197845006eba 100644 --- a/baselib/msglib/src/standard/messenger_device_session_manager.c +++ b/baselib/msglib/src/standard/messenger_device_session_manager.c @@ -107,6 +107,22 @@ static void ProcessSessionMessageReceived(const uint8_t *data, uint32_t len) FREE(queueData); } +static void ProcessMessageSendFailed(const DeviceIdentify *devId, uint64_t transNo, uint32_t result) +{ + if (devId == NULL) { + return; + } + + DeviceSessionManager *instance = GetDeviceSessionManagerInstance(); + + MessageSendResultNotifier notifier = instance->sendResultNotifier; + if (notifier == NULL) { + SECURITY_LOG_ERROR("sendResultNotifier is null"); + return; + } + notifier(devId, transNo, result); +} + static void OnSessionMessageReceived(const DeviceIdentify *devId, const uint8_t *msg, uint32_t msgLen) { DeviceSessionManager *instance = GetDeviceSessionManagerInstance(); @@ -216,6 +232,7 @@ static int MessengerOnSessionOpened(int sessionId, int result) int sent = SendBytes(sessionId, msgData->msgData, msgData->msgLen); if (sent != 0) { SECURITY_LOG_ERROR("SendBytes error code = %{public}d", ret); + ProcessMessageSendFailed(&msgData->destIdentity, msgData->transNo, sent); } FREE(msgData); } @@ -453,6 +470,7 @@ void MessengerSendMsgTo(uint64_t transNo, const DeviceIdentify *devId, const uin int ret = SendBytes(sessionId, msg, msgLen); if (ret != 0) { SECURITY_LOG_ERROR("SendBytes error code = %{public}d", ret); + ProcessMessageSendFailed(devId, transNo, ret); } return; } diff --git a/baselib/msglib/src/standard/messenger_device_status_manager.cpp b/baselib/msglib/src/standard/messenger_device_status_manager.cpp index 955f9ca2561e517390bdcbab6933df33d87ce7ff..6d3690e149341af6b6c2331aa342a452e4e184e1 100644 --- a/baselib/msglib/src/standard/messenger_device_status_manager.cpp +++ b/baselib/msglib/src/standard/messenger_device_status_manager.cpp @@ -79,6 +79,11 @@ public: EVENT_NODE_STATE_OFFLINE = 0, EVENT_NODE_STATE_ONLINE = 1, }; + struct QueueStatusData { + DeviceIdentify srcIdentity {0, {0}}; + uint32_t status {0}; + uint32_t devType {0}; + }; DslmDeviceState() = default; ~DslmDeviceState() override = default; @@ -126,11 +131,7 @@ public: SECURITY_LOG_ERROR("ProcessDeviceStatusReceiver, invalid queue"); return; } - struct QueueStatusData { - DeviceIdentify srcIdentity {0, {0}}; - uint32_t status {0}; - uint32_t devType {0}; - }; + QueueStatusData *data = new (std::nothrow) QueueStatusData; if (data == nullptr) { SECURITY_LOG_ERROR("ProcessDeviceStatusReceiver, malloc result null");