From e6cfc565ae20673e2cc71ca4c4ee05473b49ee77 Mon Sep 17 00:00:00 2001 From: "jaesick.shin" Date: Mon, 19 Sep 2016 17:15:44 +0900 Subject: [PATCH] Modify logic for subscribe callback and bug fixed. this patch included, 1. modify logic for subscribe callback. call the user subscriberquestcallback function always. 2. bug fixed for NSProviderUnsetConsumerTopic. Change-Id: Iad177bdf56cc7932ba1b95c157496d47ab6f9132 Signed-off-by: jaesick.shin Reviewed-on: https://gerrit.iotivity.org/gerrit/11923 Tested-by: jenkins-iotivity Reviewed-by: Uze Choi --- .../notification/examples/linux/notificationprovider.c | 2 +- service/notification/src/provider/NSProviderInterface.c | 4 ++-- .../notification/src/provider/NSProviderSubscription.c | 4 ++-- service/notification/src/provider/NSProviderTopic.c | 16 +++++++++++----- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/service/notification/examples/linux/notificationprovider.c b/service/notification/examples/linux/notificationprovider.c index 32c4f09..89a5a42 100644 --- a/service/notification/examples/linux/notificationprovider.c +++ b/service/notification/examples/linux/notificationprovider.c @@ -305,7 +305,7 @@ int main() break; case 10: - printf("NSProviderGetConsumerTopics\n"); + printf("NSProviderGetTopics\n"); { NSTopicLL * topics = NSProviderGetTopics(); printTopics(topics); diff --git a/service/notification/src/provider/NSProviderInterface.c b/service/notification/src/provider/NSProviderInterface.c index 71fcab4..6d68184 100644 --- a/service/notification/src/provider/NSProviderInterface.c +++ b/service/notification/src/provider/NSProviderInterface.c @@ -224,9 +224,9 @@ NSResult NSAcceptSubscription(const char * consumerId, bool accepted) NS_LOG(DEBUG, "NSAccept - IN"); pthread_mutex_lock(&nsInitMutex); - if(!consumerId) + if(!consumerId || consumerId[0] == '\0' || NSGetPolicy() == NS_POLICY_CONSUMER) { - NS_LOG(ERROR, "consumerId is NULL"); + NS_LOG(ERROR, "consumerId is NULL or NS Policy is Consumer"); pthread_mutex_unlock(&nsInitMutex); return NS_FAIL; } diff --git a/service/notification/src/provider/NSProviderSubscription.c b/service/notification/src/provider/NSProviderSubscription.c index 375a05e..3f703f3 100644 --- a/service/notification/src/provider/NSProviderSubscription.c +++ b/service/notification/src/provider/NSProviderSubscription.c @@ -165,16 +165,16 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour } bool currPolicy = NSGetPolicy(); + NSAskAcceptanceToUser(entityHandlerRequest); if (currPolicy == NS_POLICY_PROVIDER) { NS_LOG(DEBUG, "NSGetSubscriptionAccepter == NS_ACCEPTER_PROVIDER"); - NSAskAcceptanceToUser(entityHandlerRequest); } else if (currPolicy == NS_POLICY_CONSUMER) { NS_LOG(DEBUG, "NSGetSubscriptionAccepter == NS_ACCEPTER_CONSUMER"); - NSSendConsumerSubResponse(entityHandlerRequest); + NSSendConsumerSubResponse(NSCopyOCEntityHandlerRequest(entityHandlerRequest)); } } else if (resourceType == NS_RESOURCE_SYNC) diff --git a/service/notification/src/provider/NSProviderTopic.c b/service/notification/src/provider/NSProviderTopic.c index 6ba5094..07743cf 100644 --- a/service/notification/src/provider/NSProviderTopic.c +++ b/service/notification/src/provider/NSProviderTopic.c @@ -198,13 +198,12 @@ NSResult NSSendTopicUpdationToConsumer(char *consumerId) NSCacheSubData * subData = (NSCacheSubData*) element->data; - if (OCNotifyListOfObservers(rHandle, (OCObservationId*)&subData->messageObId, 1, payload, OC_HIGH_QOS) - != OC_STACK_OK) + if (OCNotifyListOfObservers(rHandle, (OCObservationId*)&subData->messageObId, 1, payload, + OC_HIGH_QOS) != OC_STACK_OK) { NS_LOG(ERROR, "fail to send topic updation"); OCRepPayloadDestroy(payload); return NS_ERROR; - } OCRepPayloadDestroy(payload); @@ -342,7 +341,7 @@ NSResult NSPostConsumerTopics(OCEntityHandlerRequest * entityHandlerRequest) payloadValue = NSPayloadFindValue(payload, NS_ATTRIBUTE_TOPIC_LIST); size_t dimensionSize = calcDimTotal(payloadValue->arr.dimensions); size_t dimensions[3] = {dimensionSize, 0, 0}; - OCRepPayloadGetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST, & topicListPayload, dimensions); + OCRepPayloadGetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST, &topicListPayload, dimensions); for(int i = 0; i <(int)dimensionSize; i++) { @@ -399,6 +398,7 @@ void * NSTopicSchedule(void * ptr) NSFreeOCEntityHandlerRequest((OCEntityHandlerRequest*) node->taskData); break; case TASK_SUBSCRIBE_TOPIC: + { NS_LOG(DEBUG, "CASE TASK_SUBSCRIBE_TOPIC : "); NSCacheElement * newObj = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement)); newObj->data = node->taskData; @@ -406,12 +406,18 @@ void * NSTopicSchedule(void * ptr) NSStorageWrite(consumerTopicList, newObj); NSCacheTopicSubData * topicSubData = (NSCacheTopicSubData *) node->taskData; NSSendTopicUpdationToConsumer(topicSubData->id); + } break; case TASK_UNSUBSCRIBE_TOPIC: + { NS_LOG(DEBUG, "CASE TASK_SUBSCRIBE_TOPIC : "); NSProviderDeleteConsumerTopic(consumerTopicList, (NSCacheTopicSubData *) node->taskData); - NS_LOG(DEBUG, "CASE TASK_SUBSCRIBE_TOPIC AFter: "); + NSCacheTopicSubData * topicSubData = (NSCacheTopicSubData *) node->taskData; + NSSendTopicUpdationToConsumer(topicSubData->id); + OICFree(topicSubData->topicName); + OICFree(topicSubData); + } break; case TASK_ADD_TOPIC: { -- 2.7.4