From bdccdd1993e3ed3a12e77d1147b89ec5026eb62f Mon Sep 17 00:00:00 2001 From: YounghyunJoo Date: Tue, 23 Aug 2016 20:58:11 +0900 Subject: [PATCH] Add Logic to store NSProvider subscribe information after subscribing - fix bug for non-storing issue - fix bug logic which does not push task into the queue when received presence stopped Change-Id: I0ba93229bfa02361def5bfbf357043ec05e5a4f1 Signed-off-by: YounghyunJoo Reviewed-on: https://gerrit.iotivity.org/gerrit/10759 Tested-by: jenkins-iotivity Reviewed-by: Uze Choi Tested-by: Uze Choi --- service/notification/src/common/NSConstants.h | 2 +- .../notification/src/consumer/NSConsumerCommunication.c | 7 +++++++ service/notification/src/consumer/NSConsumerDiscovery.c | 2 ++ .../src/consumer/NSConsumerInternalTaskController.c | 17 +++++++++++++++-- service/notification/src/consumer/NSConsumerScheduler.c | 1 + 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/service/notification/src/common/NSConstants.h b/service/notification/src/common/NSConstants.h index d05a5e5..a365e51 100644 --- a/service/notification/src/common/NSConstants.h +++ b/service/notification/src/common/NSConstants.h @@ -219,7 +219,7 @@ typedef enum eTaskType TASK_CONSUMER_REQ_DISCOVER = 8001, TASK_CONSUMER_REQ_SUBSCRIBE = 8002, TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL = 8003, - TASK_CONSUMER_RECV_SUBSCRIBE_CONFIRMED = 8004, + TASK_CONSUMER_SENT_REQ_OBSERVE = 8004, TASK_CONSUMER_RECV_PROVIDER_CHANGED = 8005, TASK_CONSUMER_RECV_MESSAGE = 8101, diff --git a/service/notification/src/consumer/NSConsumerCommunication.c b/service/notification/src/consumer/NSConsumerCommunication.c index ef63b4b..3d7e75b 100644 --- a/service/notification/src/consumer/NSConsumerCommunication.c +++ b/service/notification/src/consumer/NSConsumerCommunication.c @@ -108,6 +108,13 @@ NSResult NSConsumerSubscribeProvider(NSProvider * provider) connections = connections->next; } + NSProvider_internal * taskProvider = NSCopyProvider_internal(provider_internal); + NSTask * task = NSMakeTask(TASK_CONSUMER_SENT_REQ_OBSERVE, (void *) taskProvider); + NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(task, + NS_ERROR, NSRemoveProvider_internal(taskProvider)); + + NSConsumerPushEvent(task); + return NS_OK; } diff --git a/service/notification/src/consumer/NSConsumerDiscovery.c b/service/notification/src/consumer/NSConsumerDiscovery.c index 96ec822..52bf446 100644 --- a/service/notification/src/consumer/NSConsumerDiscovery.c +++ b/service/notification/src/consumer/NSConsumerDiscovery.c @@ -72,6 +72,8 @@ OCStackApplicationResult NSConsumerPresenceListener( NSTask * task = NSMakeTask(TASK_CONSUMER_PROVIDER_DELETED, addr); NS_VERIFY_NOT_NULL(task, OC_STACK_KEEP_TRANSACTION); + + NSConsumerPushEvent(task); } else if (payload->trigger == OC_PRESENCE_TRIGGER_CREATE) diff --git a/service/notification/src/consumer/NSConsumerInternalTaskController.c b/service/notification/src/consumer/NSConsumerInternalTaskController.c index 06742bf..1ec6a7f 100644 --- a/service/notification/src/consumer/NSConsumerInternalTaskController.c +++ b/service/notification/src/consumer/NSConsumerInternalTaskController.c @@ -303,6 +303,14 @@ void NSConsumerHandleProviderDeleted(NSProvider_internal * provider) NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *)1 : NULL); } +void NSConsumerHandleSubscribeSucceed(NSProvider_internal * provider) +{ + NS_VERIFY_NOT_NULL_V(provider); + + NSResult ret = NSProviderCacheUpdate(provider); + NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL); +} + void NSConsumerHandleRecvProviderChanged(NSMessage * msg) { NS_VERIFY_NOT_NULL_V(msg); @@ -403,10 +411,15 @@ void NSConsumerInternalTaskProcessing(NSTask * task) NS_LOG_V(DEBUG, "Receive Event : %d", (int)task->taskType); switch (task->taskType) { - //case TASK_CONSUMER_RECV_SUBSCRIBE_CONFIRMED: + case TASK_CONSUMER_SENT_REQ_OBSERVE: + { + NS_LOG(DEBUG, "Receive Subscribe succeed from provider."); + NSConsumerHandleSubscribeSucceed((NSProvider_internal *)task->taskData); + NSRemoveProvider_internal((NSProvider_internal *)task->taskData); + break; + } case TASK_CONSUMER_RECV_PROVIDER_CHANGED: { - //NS_LOG(DEBUG, "Receive Subscribe confirm from provider."); NS_LOG(DEBUG, "Receive Provider Changed"); NSConsumerHandleRecvProviderChanged((NSMessage *)task->taskData); NSRemoveMessage((NSMessage *)task->taskData); diff --git a/service/notification/src/consumer/NSConsumerScheduler.c b/service/notification/src/consumer/NSConsumerScheduler.c index 7e85eab..55bc75e 100644 --- a/service/notification/src/consumer/NSConsumerScheduler.c +++ b/service/notification/src/consumer/NSConsumerScheduler.c @@ -320,6 +320,7 @@ void NSConsumerTaskProcessing(NSTask * task) case TASK_RECV_SYNCINFO: case TASK_CONSUMER_RECV_MESSAGE: case TASK_CONSUMER_PROVIDER_DISCOVERED: + case TASK_CONSUMER_SENT_REQ_OBSERVE: case TASK_CONSUMER_RECV_PROVIDER_CHANGED: case TASK_MAKE_SYNCINFO: case TASK_CONSUMER_REQ_TOPIC_URI: -- 2.7.4