+ (void) ctx;\r
+ (void) handle;\r
+\r
+ NS_LOG_V(DEBUG, "clientResponse->sequenceNumber = %d", clientResponse->sequenceNumber);\r
+\r
+ if (clientResponse->sequenceNumber == OC_OBSERVE_REGISTER)\r
+ {\r
+ NS_LOG(DEBUG, "MQ OC_OBSERVE_RIGSTER");\r
+ NSSetMQServerInfo(clientResponse->resourceUri, &(clientResponse->devAddr));\r
+ }\r
+\r
+ NS_VERIFY_NOT_NULL(clientResponse, OC_STACK_KEEP_TRANSACTION);\r
+ NS_VERIFY_STACK_SUCCESS(NSOCResultToSuccess(clientResponse->result), OC_STACK_KEEP_TRANSACTION);\r
+ NS_VERIFY_NOT_NULL(clientResponse->payload, OC_STACK_KEEP_TRANSACTION);\r
+\r
+ NS_LOG(DEBUG, "income observe response of MQ notification");\r
+ NS_LOG_V(INFO_PRIVATE, "MQ OBS response income : %s:%d",\r
+ clientResponse->devAddr.addr, clientResponse->devAddr.port);\r
+ NS_LOG_V(DEBUG, "MQ OBS response result : %d",\r
+ clientResponse->result);\r
+ NS_LOG_V(DEBUG, "MQ OBS response sequenceNum : %d",\r
+ clientResponse->sequenceNumber);\r
+ NS_LOG_V(DEBUG, "MQ OBS response resource uri : %s",\r
+ clientResponse->resourceUri);\r
+ NS_LOG_V(DEBUG, "MQ OBS response Transport Type : %d",\r
+ clientResponse->devAddr.adapter);\r
+\r
+ OCRepPayload * payload = (OCRepPayload *)clientResponse->payload;\r
+ NS_VERIFY_NOT_NULL(payload, OC_STACK_KEEP_TRANSACTION);\r
+\r
+ NSMessageType type = -1;\r
+ bool getResult = OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_TYPE, (int64_t *) &type);\r
+ NS_LOG_V (DEBUG, "message sync type : %d", (int) type);\r
+\r
+ if (!getResult && (type == NS_MESSAGE_READ || type == NS_MESSAGE_DELETED))\r
+ {\r
+ char * pId = NULL;\r
+ getResult = OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, &pId);\r
+ NS_LOG_V (INFO_PRIVATE, "provider id: %s", pId);\r
+\r
+ if (getResult && strcmp(pId, NSGetProviderInfo()->providerId) == 0)\r
+ {\r
+ NSSyncInfo * syncInfo = (NSSyncInfo *)OICMalloc(sizeof(NSSyncInfo));\r
+ syncInfo->state = (type == NS_MESSAGE_READ) ? NS_SYNC_READ : NS_SYNC_DELETED;\r
+ OICStrcpy(syncInfo->providerId, NS_UUID_STRING_SIZE, pId);\r
+ NSOICFree(pId);\r
+ NSPushQueue(NOTIFICATION_SCHEDULER, TASK_RECV_READ, (void*) syncInfo);\r
+ }\r
+ }\r
+\r
+ return OC_STACK_KEEP_TRANSACTION;\r
+}\r
+\r
+OCStackApplicationResult NSProviderGetMQResponseCB(void * ctx, OCDoHandle handle,\r
+ OCClientResponse * clientResponse)\r
+{\r
+ NS_LOG(DEBUG, "NSProviderGetMQResponseCB - IN");\r
+\r
+ (void) handle;\r
+\r
+ NS_VERIFY_NOT_NULL(clientResponse, OC_STACK_KEEP_TRANSACTION);\r
+ NS_VERIFY_STACK_SUCCESS(NSOCResultToSuccess(clientResponse->result), OC_STACK_KEEP_TRANSACTION);\r
+ NS_VERIFY_NOT_NULL(clientResponse->payload, OC_STACK_KEEP_TRANSACTION);\r
+\r
+ NS_LOG(DEBUG, "income get response of MQ broker");\r
+ NS_LOG_V(INFO_PRIVATE, "MQ GET response income : %s:%d",\r
+ clientResponse->devAddr.addr, clientResponse->devAddr.port);\r
+ NS_LOG_V(DEBUG, "MQ GET response result : %d",\r
+ clientResponse->result);\r
+ NS_LOG_V(DEBUG, "MQ GET response sequenceNum : %d",\r
+ clientResponse->sequenceNumber);\r
+ NS_LOG_V(DEBUG, "MQ GET response resource uri : %s",\r
+ clientResponse->resourceUri);\r
+ NS_LOG_V(DEBUG, "MQ GET response Transport Type : %d",\r
+ clientResponse->devAddr.adapter);\r
+\r
+ char ** topicList = NULL;\r
+ size_t dimensions[MAX_REP_ARRAY_DEPTH] = {0};\r
+ OCRepPayloadGetStringArray((OCRepPayload *) clientResponse->payload,\r
+ NS_ATTIRBUTE_MQ_TOPICLIST, & topicList, dimensions);\r
+\r
+ char * interestTopicName = (char *) ctx;\r
+\r
+ NS_LOG_V(DEBUG, "interestTopicName = %s", interestTopicName);\r
+ for (size_t i = 0; i < dimensions[0]; ++i)\r
+ {\r
+ NS_LOG_V(DEBUG, "found MQ topic : %s", topicList[i]);\r
+ if (!strcmp(topicList[i], interestTopicName))\r
+ {\r
+ NS_LOG(DEBUG, "subscribe to MQ notification");\r
+\r
+ OCCallbackData cbdata = { NULL, NULL, NULL };\r
+ cbdata.cb = NSProviderMQListener;\r
+ cbdata.context = NULL;\r
+ cbdata.cd = NULL;\r
+\r
+ OCStackResult ret = OCDoResource(NULL, OC_REST_OBSERVE, topicList[i],\r
+ clientResponse->addr, NULL, CT_DEFAULT, OC_HIGH_QOS, &cbdata, NULL, 0);\r
+\r
+ if (!NSOCResultToSuccess(ret))\r
+ {\r
+ NS_LOG(DEBUG, "fail to subscribe to MQ notification");\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+\r
+ NS_LOG(DEBUG, "NSProviderGetMQResponseCB - OUT");\r
+ return OC_STACK_KEEP_TRANSACTION;\r
+}\r