From 918562dea32b4bff591af9d7464f81819ac6057d Mon Sep 17 00:00:00 2001 From: "jaesick.shin" Date: Mon, 21 Nov 2016 19:12:55 +0900 Subject: [PATCH] [IoT-1580] Add logic for send syncinfo with MQ this patch include, When the NSProviderSendSyncInfo function is called, the MQ server sends sync information to MQ if it is active. second patch include, [IoT-1579] The spec of D2S and D2D Notification are synchronized. Change-Id: Id6a302136ca7693b2ed983ff4977a1a1a8887d11 Signed-off-by: jaesick.shin Reviewed-on: https://gerrit.iotivity.org/gerrit/14561 Tested-by: jenkins-iotivity Reviewed-by: Uze Choi Tested-by: Uze Choi --- .../notification/src/provider/NSProviderListener.c | 36 +++++++--------------- .../src/provider/NSProviderNotification.c | 24 +++++++++++++-- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/service/notification/src/provider/NSProviderListener.c b/service/notification/src/provider/NSProviderListener.c index 7ebb7a1..3c7b5eb 100644 --- a/service/notification/src/provider/NSProviderListener.c +++ b/service/notification/src/provider/NSProviderListener.c @@ -356,43 +356,29 @@ OCStackApplicationResult NSProviderMQListener(void * ctx, OCDoHandle handle, NS_LOG_V(DEBUG, "MQ OBS response Transport Type : %d", clientResponse->devAddr.adapter); - OCRepPayload * payload = NULL; - OCRepPayloadGetPropObject((OCRepPayload *)clientResponse->payload, NS_ATTRIBUTE_MQ_MESSAGE, - & payload); + OCRepPayload * payload = (OCRepPayload *)clientResponse->payload; NS_VERIFY_NOT_NULL(payload, OC_STACK_KEEP_TRANSACTION); - char * pId = NULL; - bool getResult = OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, &pId); - NS_LOG_V (DEBUG, "provider id: %s", pId); + NSMessageType type = -1; + bool getResult = OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_TYPE, (int64_t *) &type); + NS_LOG_V (DEBUG, "message sync type : %d", (int) type); - if (strcmp(pId, NSGetProviderInfo()->providerId) == 0) + if (!getResult && (type == NS_MESSAGE_READ || type == NS_MESSAGE_DELETED)) { - NSMessageType type = -1; - getResult = OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_TYPE, (int64_t *) &type); + char * pId = NULL; + getResult = OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, &pId); + NS_LOG_V (DEBUG, "provider id: %s", pId); - if (getResult && (type == NS_MESSAGE_READ || type == NS_MESSAGE_DELETED)) + if (getResult && strcmp(pId, NSGetProviderInfo()->providerId) == 0) { NSSyncInfo * syncInfo = (NSSyncInfo *)OICMalloc(sizeof(NSSyncInfo)); - NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(syncInfo, - OC_STACK_KEEP_TRANSACTION, NSFreeSync(syncInfo)); - - bool getResult = OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_MESSAGE_ID, - (int64_t *) &(syncInfo->messageId)); syncInfo->state = (type == NS_MESSAGE_READ) ? NS_SYNC_READ : NS_SYNC_DELETED; OICStrcpy(syncInfo->providerId, NS_UUID_STRING_SIZE, pId); - - if (getResult) - { - NSPushQueue(NOTIFICATION_SCHEDULER, TASK_RECV_READ, (void*) syncInfo); - } - else - { - NSFreeSync(syncInfo); - } + OICFree(pId); + NSPushQueue(NOTIFICATION_SCHEDULER, TASK_RECV_READ, (void*) syncInfo); } } - OCRepPayloadDestroy(payload); return OC_STACK_KEEP_TRANSACTION; } diff --git a/service/notification/src/provider/NSProviderNotification.c b/service/notification/src/provider/NSProviderNotification.c index 2d21f3b..6be4265 100644 --- a/service/notification/src/provider/NSProviderNotification.c +++ b/service/notification/src/provider/NSProviderNotification.c @@ -128,7 +128,7 @@ NSResult NSSendNotification(NSMessage *msg) #ifdef WITH_MQ if (NSGetMQServerInfo()) { - NSProviderPublishTopic(payload, NSProviderPublishMQResponseCB); + NSProviderPublishTopic(OCRepPayloadClone(payload), NSProviderPublishMQResponseCB); } #endif @@ -268,13 +268,33 @@ NSResult NSSendSync(NSSyncInfo *sync) it = it->next; } - OCRepPayload* payload; + OCRepPayload* payload = NULL; if (NSSetSyncPayload(sync, &payload) != NS_OK) { NS_LOG(ERROR, "Failed to allocate payload"); return NS_ERROR; } +#ifdef WITH_MQ + if (NSGetMQServerInfo()) + { + OCRepPayload* MQPayload = OCRepPayloadClone(payload); + NSMessageType MQType = 0; + + if (sync->state == NS_SYNC_READ) + { + MQType = NS_MESSAGE_READ; + } + else if (sync->state == NS_SYNC_DELETED) + { + MQType = NS_MESSAGE_DELETED; + } + + OCRepPayloadSetPropInt(MQPayload, NS_ATTRIBUTE_TYPE, (int64_t) MQType); + NSProviderPublishTopic(MQPayload, NSProviderPublishMQResponseCB); + } +#endif + for (i = 0; i < obCount; ++i) { NS_LOG(DEBUG, "-------------------------------------------------------message\n"); -- 2.7.4