X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Fnotification%2Fsrc%2Fconsumer%2FNSConsumerCommunication.c;h=3039346226ab917cbd7f9da6b85c439cf9ceda91;hb=refs%2Ftags%2Faccepted%2Ftizen%2Funified%2F20171010.063815;hp=7d5fa6c4f87867746b52466d4a773f0f51f4136a;hpb=340918a789806270515ebef6723a058f6c9b3f7d;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/notification/src/consumer/NSConsumerCommunication.c b/service/notification/src/consumer/NSConsumerCommunication.c index 7d5fa6c..3039346 100644 --- a/service/notification/src/consumer/NSConsumerCommunication.c +++ b/service/notification/src/consumer/NSConsumerCommunication.c @@ -29,10 +29,8 @@ #define NS_SYNC_URI "/notification/sync" -NSMessage * NSCreateMessage_internal(uint64_t msgId, const char * providerId); NSSyncInfo * NSCreateSyncInfo_consumer(uint64_t msgId, const char * providerId, NSSyncType state); -NSMessage * NSGetMessage(OCClientResponse * clientResponse); NSSyncInfo * NSGetSyncInfoc(OCClientResponse * clientResponse); NSTopicLL * NSGetTopicLL(OCClientResponse * clientResponse); @@ -84,7 +82,7 @@ NSResult NSConsumerSubscribeProvider(NSProvider * provider) } } - NS_LOG_V(DEBUG, "subscribe to %s:%d", connections->addr->addr, connections->addr->port); + NS_LOG_V(INFO_PRIVATE, "subscribe to %s:%d", connections->addr->addr, connections->addr->port); NS_LOG(DEBUG, "get subscribe message query"); char * query = NULL; @@ -95,7 +93,7 @@ NSResult NSConsumerSubscribeProvider(NSProvider * provider) NS_LOG_V(DEBUG, "subscribe query : %s", query); OCStackResult ret = NSInvokeRequest(&(connections->messageHandle), OC_REST_OBSERVE, connections->addr, query, NULL, - NSConsumerMessageListener, NULL, type); + NSConsumerMessageListener, NULL, NULL, type); NS_VERIFY_STACK_SUCCESS_WITH_POST_CLEANING(NSOCResultToSuccess(ret), NS_ERROR, NSUpdateObserveResult(provider_internal, query)); NSOICFree(query); @@ -109,7 +107,7 @@ NSResult NSConsumerSubscribeProvider(NSProvider * provider) NS_LOG_V(DEBUG, "subscribe query : %s", query); ret = NSInvokeRequest(&(connections->syncHandle), OC_REST_OBSERVE, connections->addr, query, NULL, - NSConsumerSyncInfoListener, NULL, type); + NSConsumerSyncInfoListener, NULL, NULL, type); NS_VERIFY_STACK_SUCCESS_WITH_POST_CLEANING(NSOCResultToSuccess(ret), NS_ERROR, NSUpdateObserveResult(provider_internal, query)); NSOICFree(query); @@ -184,7 +182,7 @@ OCStackApplicationResult NSConsumerMessageListener( NS_VERIFY_STACK_SUCCESS(NSOCResultToSuccess(clientResponse->result), OC_STACK_KEEP_TRANSACTION); NS_LOG(DEBUG, "build NSMessage"); - NSMessage * newNoti = NSGetMessage(clientResponse); + NSMessage * newNoti = NSGetMessage((OCRepPayload *) clientResponse->payload); NS_VERIFY_NOT_NULL(newNoti, OC_STACK_KEEP_TRANSACTION); NSTaskType type = TASK_CONSUMER_RECV_MESSAGE; @@ -219,66 +217,6 @@ void NSGetMessagePostClean(char * pId, OCDevAddr * addr) NSOICFree(addr); } -NSMessage * NSGetMessage(OCClientResponse * clientResponse) -{ - NS_VERIFY_NOT_NULL(clientResponse->payload, NULL); - OCRepPayload * payload = (OCRepPayload *)clientResponse->payload; - - NS_LOG(DEBUG, "get msg id"); - uint64_t id = NULL; - bool getResult = OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_MESSAGE_ID, (int64_t *)&id); - NS_VERIFY_NOT_NULL(getResult == true ? (void *) 1 : NULL, NULL); - - NS_LOG(DEBUG, "get provider id"); - char * pId = NULL; - getResult = OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, &pId); - NS_LOG_V (DEBUG, "provider id: %s", pId); - NS_VERIFY_NOT_NULL(getResult == true ? (void *) 1 : NULL, NULL); - - NS_LOG(DEBUG, "create NSMessage"); - NSMessage * retMsg = NSCreateMessage_internal(id, pId); - NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(retMsg, NULL, NSOICFree(pId)); - NSOICFree(pId); - - NS_LOG(DEBUG, "get msg optional field"); - OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_TITLE, &retMsg->title); - OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_TEXT, &retMsg->contentText); - OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_SOURCE, &retMsg->sourceName); - OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_TOPIC_NAME, &retMsg->topic); - - OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_TYPE, (int64_t *)&retMsg->type); - OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_DATETIME, &retMsg->dateTime); - OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_TTL, (int64_t *)&retMsg->ttl); - - char * icon = NULL; - OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_ICON_IMAGE, &icon); - - if (icon) - { - NSMediaContents * contents = (NSMediaContents *)OICMalloc(sizeof(NSMediaContents)); - if (contents) - { - contents->iconImage = icon; - retMsg->mediaContents = contents; - } - else - { - NSOICFree(icon); - } - } - - NS_LOG_V(DEBUG, "Msg ID : %lld", (long long int)retMsg->messageId); - NS_LOG_V(DEBUG, "Msg Title : %s", retMsg->title); - NS_LOG_V(DEBUG, "Msg Content : %s", retMsg->contentText); - NS_LOG_V(DEBUG, "Msg Source : %s", retMsg->sourceName); - NS_LOG_V(DEBUG, "Msg Topic : %s", retMsg->topic); - NS_LOG_V(DEBUG, "Msg Type : %d", retMsg->type); - NS_LOG_V(DEBUG, "Msg Date : %s", retMsg->dateTime); - NS_LOG_V(DEBUG, "Msg ttl : %lld", (long long int)retMsg->ttl); - - return retMsg; -} - NSSyncInfo * NSGetSyncInfoc(OCClientResponse * clientResponse) { NS_VERIFY_NOT_NULL(clientResponse->payload, NULL); @@ -286,7 +224,7 @@ NSSyncInfo * NSGetSyncInfoc(OCClientResponse * clientResponse) OCRepPayload * payload = (OCRepPayload *)clientResponse->payload; NS_LOG(DEBUG, "get msg id"); - uint64_t id = NULL; + uint64_t id = 0; bool getResult = OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_MESSAGE_ID, (int64_t *)&id); NS_VERIFY_NOT_NULL(getResult == true ? (void *) 1 : NULL, NULL); @@ -298,38 +236,21 @@ NSSyncInfo * NSGetSyncInfoc(OCClientResponse * clientResponse) NS_LOG(DEBUG, "get state"); int64_t state = 0; getResult = OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_STATE, & state); - NS_VERIFY_NOT_NULL(getResult == true ? (void *) 1 : NULL, NULL); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(getResult == true ? (void *) 1 : NULL, + NULL, NSOICFree(pId)); NS_LOG(DEBUG, "create NSSyncInfo"); NSSyncInfo * retSync = NSCreateSyncInfo_consumer(id, pId, (NSSyncType)state); + NSOICFree(pId); NS_VERIFY_NOT_NULL(retSync, NULL); NS_LOG_V(DEBUG, "Sync ID : %lld", (long long int)retSync->messageId); NS_LOG_V(DEBUG, "Sync State : %d", (int) retSync->state); - NS_LOG_V(DEBUG, "Sync Provider ID : %s", retSync->providerId); + NS_LOG_V(INFO_PRIVATE, "Sync Provider ID : %s", retSync->providerId); return retSync; } -NSMessage * NSCreateMessage_internal(uint64_t id, const char * providerId) -{ - NSMessage * retMsg = (NSMessage *)OICMalloc(sizeof(NSMessage)); - NS_VERIFY_NOT_NULL(retMsg, NULL); - - retMsg->messageId = id; - OICStrcpy(retMsg->providerId, sizeof(char) * NS_DEVICE_ID_LENGTH, providerId); - retMsg->title = NULL; - retMsg->contentText = NULL; - retMsg->sourceName = NULL; - retMsg->topic = NULL; - retMsg->type = NS_MESSAGE_INFO; - retMsg->dateTime = NULL; - retMsg->ttl = 0; - retMsg->mediaContents = NULL; - - return retMsg; -} - NSSyncInfo * NSCreateSyncInfo_consumer(uint64_t msgId, const char * providerId, NSSyncType state) { NS_VERIFY_NOT_NULL(providerId, NULL); @@ -369,7 +290,7 @@ OCStackResult NSSendSyncInfo(NSSyncInfo * syncInfo, OCDevAddr * addr) OCStackResult ret = NSInvokeRequest(NULL, OC_REST_POST, addr, uri, (OCPayload*)payload, - NSConsumerCheckPostResult, NULL, type); + NSConsumerCheckPostResult, NULL, NULL, type); NSOICFree(uri); return ret; @@ -377,11 +298,11 @@ OCStackResult NSSendSyncInfo(NSSyncInfo * syncInfo, OCDevAddr * addr) char * NSGetCloudUri(const char * providerId, char * uri) { - size_t uriLen = NS_DEVICE_ID_LENGTH + 1 + strlen(uri) + 1 + 3; + size_t uriLen = NS_DEVICE_ID_LENGTH + 1 + strlen(uri) + 1 + 10; char * retUri = (char *)OICMalloc(uriLen); NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(retUri, NULL, NSOICFree(uri)); - snprintf(retUri, uriLen, "/di/%s%s", providerId, uri); + snprintf(retUri, uriLen, "/oic/route/%s%s", providerId, uri); NSOICFree(uri); NS_LOG_V(DEBUG, "Cloud uri : %s", retUri); @@ -398,11 +319,12 @@ void NSConsumerCommunicationTaskProcessing(NSTask * task) NS_VERIFY_NOT_NULL_V(task->taskData); NS_LOG(DEBUG, "Request Subscribe"); NSResult ret = NSConsumerSubscribeProvider((NSProvider *)task->taskData); + NSRemoveProvider_internal((void *) task->taskData); NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *)1 : NULL); } else if (task->taskType == TASK_SEND_SYNCINFO) { - NS_VERIFY_NOT_NULL_V(task->taskData); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(task->taskData, NSOICFree(task)); NSSyncInfo_internal * syncInfo = (NSSyncInfo_internal *)task->taskData; NSProviderConnectionInfo * info = syncInfo->connection; @@ -423,18 +345,23 @@ void NSConsumerCommunicationTaskProcessing(NSTask * task) else if (task->taskType == TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL) { NSProvider_internal * provider = (NSProvider_internal *)task->taskData; + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(provider, + { + NSRemoveProvider_internal(provider); + NSOICFree(task); + }); NSProviderConnectionInfo * connections = provider->connection; while(connections) { if (connections->isSubscribing == false) { - NS_LOG_V(DEBUG, "unsubscribed to %s:%d", + NS_LOG_V(INFO_PRIVATE, "unsubscribed to %s:%d", connections->addr->addr, connections->addr->port); connections = connections->next; continue; } - NS_LOG_V(DEBUG, "cancel subscribe to %s:%d", + NS_LOG_V(INFO_PRIVATE, "cancel subscribe to %s:%d", connections->addr->addr, connections->addr->port); OCCancel(connections->messageHandle, NS_QOS, NULL, 0); OCCancel(connections->syncHandle, NS_QOS, NULL, 0); @@ -443,16 +370,32 @@ void NSConsumerCommunicationTaskProcessing(NSTask * task) connections->isSubscribing = false; connections = connections->next; } + + NSRemoveProvider_internal(provider); } else if (task->taskType == TASK_CONSUMER_REQ_TOPIC_LIST) { - NSProvider_internal * provider = (NSProvider_internal *)task->taskData; + NSProvider_internal * provider = NSCopyProvider_internal(task->taskData); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(provider, + { + NSRemoveProvider_internal((void *) task->taskData); + NSOICFree(task); + }); + NSRemoveProvider_internal((NSProvider_internal *)task->taskData); NSProviderConnectionInfo * connections = provider->connection; - NS_VERIFY_NOT_NULL_V(connections); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(connections, + { + NSRemoveProvider_internal((void *) provider); + NSOICFree(task); + }); char * topicUri = OICStrdup(provider->topicUri); - NS_VERIFY_NOT_NULL_V(topicUri); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(topicUri, + { + NSRemoveProvider_internal((void *) provider); + NSOICFree(task); + }); OCConnectivityType type = CT_DEFAULT; if (connections->addr->adapter == OC_ADAPTER_TCP) @@ -466,13 +409,21 @@ void NSConsumerCommunicationTaskProcessing(NSTask * task) NS_LOG(DEBUG, "get topic query"); char * query = NSMakeRequestUriWithConsumerId(topicUri); - - NS_VERIFY_NOT_NULL_V(query); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(query, + { + NSRemoveProvider_internal((void *) provider); + NSOICFree(task); + }); NS_LOG_V(DEBUG, "topic query : %s", query); OCStackResult ret = NSInvokeRequest(NULL, OC_REST_GET, connections->addr, - query, NULL, NSIntrospectTopic, (void *) provider, type); - NS_VERIFY_STACK_SUCCESS_V(NSOCResultToSuccess(ret)); + query, NULL, NSIntrospectTopic, (void *) provider, + NSRemoveProvider_internal, type); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(NSOCResultToSuccess(ret) == true ? (void *) 1 : NULL, + { + NSRemoveProvider_internal((void *) provider); + NSOICFree(task); + }); NSOICFree(query); NSOICFree(topicUri); @@ -480,12 +431,25 @@ void NSConsumerCommunicationTaskProcessing(NSTask * task) else if (task->taskType == TASK_CONSUMER_SELECT_TOPIC_LIST) { NSProvider_internal * provider = (NSProvider_internal *)task->taskData; + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(provider, + { + NSRemoveProvider_internal(provider); + NSOICFree(task); + }); NSProviderConnectionInfo * connections = provider->connection; - NS_VERIFY_NOT_NULL_V(connections); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(connections, + { + NSRemoveProvider_internal(provider); + NSOICFree(task); + }); OCRepPayload * payload = OCRepPayloadCreate(); - NS_VERIFY_NOT_NULL_V(payload); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(payload, + { + NSRemoveProvider_internal(provider); + NSOICFree(task); + }); NSTopicLL * topicLL = provider->topicLL; NSTopicLL * iter = topicLL; @@ -499,7 +463,7 @@ void NSConsumerCommunicationTaskProcessing(NSTask * task) } OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, *NSGetConsumerId()); - NS_LOG_V(DEBUG, "NS_ATTRIBUTE_CONSUMER_ID: %s", *NSGetConsumerId()); + NS_LOG_V(INFO_PRIVATE, "NS_ATTRIBUTE_CONSUMER_ID: %s", *NSGetConsumerId()); iter = topicLL; int iterSize = 0; @@ -509,7 +473,12 @@ void NSConsumerCommunicationTaskProcessing(NSTask * task) if (topicLLSize > 0) { topicPayload = (OCRepPayload **) OICMalloc(sizeof(OCRepPayload *)*topicLLSize); - NS_VERIFY_NOT_NULL_V(topicPayload); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(topicPayload, + { + OCRepPayloadDestroy(payload); + NSRemoveProvider_internal(provider); + NSOICFree(task); + }); while (iter || iterSize < topicLLSize) { @@ -534,7 +503,12 @@ void NSConsumerCommunicationTaskProcessing(NSTask * task) } char * topicUri = OICStrdup(provider->topicUri); - NS_VERIFY_NOT_NULL_V(topicUri); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(topicUri, + { + OCRepPayloadDestroy(payload); + NSRemoveProvider_internal(provider); + NSOICFree(task); + }); OCConnectivityType type = CT_DEFAULT; if (connections->addr->adapter == OC_ADAPTER_TCP) @@ -549,13 +523,28 @@ void NSConsumerCommunicationTaskProcessing(NSTask * task) NS_LOG(DEBUG, "get topic query"); char * query = NULL; query = NSMakeRequestUriWithConsumerId(topicUri); - NS_VERIFY_NOT_NULL_V(query); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(query, + { + NSOICFree(topicUri); + OCRepPayloadDestroy(payload); + NSRemoveProvider_internal(provider); + NSOICFree(task); + }); NS_LOG_V(DEBUG, "topic query : %s", query); OCStackResult ret = NSInvokeRequest(NULL, OC_REST_POST, connections->addr, - query, (OCPayload*)payload, NSConsumerCheckPostResult, NULL, type); - NS_VERIFY_STACK_SUCCESS_V(NSOCResultToSuccess(ret)); + query, (OCPayload*)payload, NSConsumerCheckPostResult, + NULL, NULL, type); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V( + NSOCResultToSuccess(ret) == true ? (void *) 1 : NULL, + { + NSOICFree(query); + NSOICFree(topicUri); + NSRemoveProvider_internal(provider); + NSOICFree(task); + }); + NSRemoveProvider_internal(provider); NSOICFree(query); NSOICFree(topicUri); } @@ -573,14 +562,13 @@ NSTopicLL * NSGetTopicLL(OCClientResponse * clientResponse) NS_VERIFY_NOT_NULL(clientResponse->payload, NULL); OCRepPayload * payload = (OCRepPayload *)clientResponse->payload; - while (payload) + OCRepPayloadValue * value = payload->values; + while (value) { - NS_LOG_V(DEBUG, "Payload Key : %s", payload->values->name); - payload = payload->next; + NS_LOG_V(DEBUG, "Payload Key : %s", value->name); + value = value->next; } - payload = (OCRepPayload *)clientResponse->payload; - char * consumerId = NULL; OCRepPayload ** topicLLPayload = NULL; @@ -651,12 +639,11 @@ OCStackApplicationResult NSIntrospectTopic( { (void) handle; - NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(clientResponse, OC_STACK_KEEP_TRANSACTION, - NSRemoveProvider_internal((NSProvider_internal *) ctx)); - NS_VERIFY_STACK_SUCCESS_WITH_POST_CLEANING(NSOCResultToSuccess(clientResponse->result), - OC_STACK_KEEP_TRANSACTION, NSRemoveProvider_internal((NSProvider_internal *) ctx)); + NS_VERIFY_NOT_NULL(clientResponse, OC_STACK_KEEP_TRANSACTION); + NS_VERIFY_STACK_SUCCESS(NSOCResultToSuccess(clientResponse->result), + OC_STACK_KEEP_TRANSACTION) - NS_LOG_V(DEBUG, "GET response income : %s:%d", + NS_LOG_V(INFO_PRIVATE, "GET response income : %s:%d", clientResponse->devAddr.addr, clientResponse->devAddr.port); NS_LOG_V(DEBUG, "GET response result : %d", clientResponse->result); @@ -668,11 +655,13 @@ OCStackApplicationResult NSIntrospectTopic( clientResponse->devAddr.adapter); NSTopicLL * newTopicLL = NSGetTopicLL(clientResponse); - NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(newTopicLL, OC_STACK_KEEP_TRANSACTION, - NSRemoveProvider_internal((NSProvider_internal *) ctx)); - NSProvider_internal * provider = (NSProvider_internal *) ctx; + NSProvider_internal * provider = NSCopyProvider_internal((NSProvider_internal *) ctx); + NS_VERIFY_NOT_NULL(provider, OC_STACK_KEEP_TRANSACTION); + NSRemoveTopicLL(provider->topicLL); provider->topicLL = NSCopyTopicLL(newTopicLL); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(provider->topicLL, OC_STACK_KEEP_TRANSACTION, + NSRemoveProvider_internal((void *) provider)); NS_LOG(DEBUG, "build NSTask"); NSTask * task = NSMakeTask(TASK_CONSUMER_RECV_TOPIC_LIST, (void *) provider);