diff --git a/services/service/include/relationshipsyncmgr/relationship_sync_mgr.h b/services/service/include/relationshipsyncmgr/relationship_sync_mgr.h index d0787d446100bd24d710f928f2ad4c4cd86a33fb..57900827e82936a898ee5c381422982fd36714f8 100644 --- a/services/service/include/relationshipsyncmgr/relationship_sync_mgr.h +++ b/services/service/include/relationshipsyncmgr/relationship_sync_mgr.h @@ -84,6 +84,8 @@ struct RelationShipChangeMsg { bool FromJson(const std::string &msgJson); const std::string ToString() const; + bool BuildCoreFields(cJSON *msg) const; + cJSON *BuildUdidArray() const; }; class ReleationShipSyncMgr { diff --git a/services/service/src/relationshipsyncmgr/relationship_sync_mgr.cpp b/services/service/src/relationshipsyncmgr/relationship_sync_mgr.cpp index a676b056dac2e0b3fda7b1203dbfc0e7bd14d5bf..ec13afb68d427755de6c1ddfa09e350babe312d4 100644 --- a/services/service/src/relationshipsyncmgr/relationship_sync_mgr.cpp +++ b/services/service/src/relationshipsyncmgr/relationship_sync_mgr.cpp @@ -542,54 +542,86 @@ cJSON *RelationShipChangeMsg::ToPayLoadJson() const return arrayObj; } -std::string RelationShipChangeMsg::ToJson() const +cJSON *RelationShipChangeMsg::BuildUdidArray() const { - cJSON *msg = cJSON_CreateObject(); - if (msg == NULL) { - LOGE("failed to create cjson object"); - return ""; + cJson *udidArrayObj = cJSON_CreateArray(); + if (!udidArrayObj) { + LOGE("cJSON_CreatArray failed"); + return nullptr; + } + + for (uint32_t index = 0; index < peerUdids.size(); index++) { + cJSON *udidStringObj = cJSON_CreateString(peerUdids[index].c_str()); + if (!udidStringObj) { + LOGE("Create UDID string failed"); + return nullptr; + } + + if (!cJSON_AddItemToArray(udidArrayObj, udidStringObj)) { + LOGE("Add UDID to array failed"); + cJSON_Delete(udidArrayObj); + cJSON_Delete(udidStringObj); + return nullptr; + } } - cJSON_AddNumberToObject(msg, MSG_TYPE, (uint32_t)type); + return udidArrayObj; +} + +bool RelationShipChangeMsg::BuildCoreFields(cJSON *msg) const +{ + if (!cJSON_AddNumberToObject(msg, MSG_TYPE, (unit32_t)type)) { + LOGE("Add type failed"); + return false; + } + cJSON *arrayObj = ToPayLoadJson(); - if (arrayObj == nullptr) { - LOGE("ArrayObj is nullptr."); - cJSON_Delete(msg); + if (!arrayObj) { + LOGE("Payload is nullptr"); + return false; + } + if (!cJSON_AddItemToObject(msg, MSG_VALUE, arrayObj)) { + LOGE("Add Payload failed"); + cJSON_Delete(arrayObj); + return false; + } + cJSON *udidArrayObj = BuildUdidArray(); + if (!udidArrayObj) { + return false; + } + if (!cJSON_AddItemToObject(msg, MSG_PEER_UDID, udidArrayObj)) { + LOGE("Add UDID array failed"); + cJSON_Delete(udidArrayObj); + return false; + } + if (!cJSON_AddStringToObject(msg, MSG_ACCOUNTID, accountName.c_str())) { + LOGE("Add account ID failed"); + return false; + } + return true; +} + +std::string RelationShipChangeMsg::ToJson() const +{ + cJSON *msg = cJSON_CreateObject(); + if (!msg) { + LOGE("Creat root object failed"); return ""; } - cJSON_AddItemToObject(msg, MSG_VALUE, arrayObj); - cJSON *udidArrayObj = cJSON_CreateArray(); - if (udidArrayObj == nullptr) { - LOGE("cJSON_CreateArray failed"); + if (!BuildCoreFields(msg)) { cJSON_Delete(msg); - cJSON_Delete(udidArrayObj); return ""; } - cJSON *udidStringObj = nullptr; - for (uint32_t index = 0; index < peerUdids.size(); index++) { - udidStringObj = cJSON_CreateString(peerUdids[index].c_str()); - if (udidStringObj == nullptr || !cJSON_AddItemToArray(udidArrayObj, udidStringObj)) { - cJSON_Delete(udidStringObj); - cJSON_Delete(udidArrayObj); - cJSON_Delete(msg); - return ""; - } - } - cJSON_AddItemToObject(msg, MSG_PEER_UDID, udidArrayObj); - cJSON_AddStringToObject(msg, MSG_ACCOUNTID, accountName.c_str()); + char *retStr = cJSON_PrintUnformatted(msg); - if (retStr == nullptr) { - LOGE("to json is nullptr."); - cJSON_Delete(msg); - cJSON_Delete(udidArrayObj); - cJSON_Delete(udidStringObj); + if (!retStr) { + LOGE("Generate JSON string failed"); return ""; } - std::string ret = std::string(retStr); + + std::string ret(retStr); cJSON_Delete(msg); cJSON_free(retStr); - cJSON_Delete(udidArrayObj); - cJSON_Delete(udidStringObj); return ret; } @@ -697,5 +729,6 @@ void GetFrontAndBackUserIdInfos(const std::vector &remoteUserIdInfos } } } + } // DistributedHardware } // OHOS \ No newline at end of file