add deregister of observe and delete subscription list from observeid
authorjaesick.shin <jaesick.shin@samsung.com>
Wed, 20 Jul 2016 12:03:07 +0000 (21:03 +0900)
committerUze Choi <uzchoi@samsung.com>
Fri, 22 Jul 2016 05:55:48 +0000 (05:55 +0000)
this commit included
add DeleteSubDatafromObid function in NSProviderMemoyCache.
this function is deleted from the subscription list of same observe id.
The function will be called when an observe deregister is requested.
fourth patch included add mutex unlock.

Change-Id: I47810fea34e95e1da789b5ef36ff04aa6c5bd956
Signed-off-by: jaesick.shin <jaesick.shin@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/9513
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
service/notification/src/common/NSStructs.h
service/notification/src/provider/NSProviderListener.c
service/notification/src/provider/NSProviderNotification.c
service/notification/src/provider/NSProviderSubscription.c
service/notification/src/provider/cache/linux/NSProviderMemoryCache.c
service/notification/src/provider/cache/linux/NSProviderMemoryCache.h

index 4ade4b1..777113a 100644 (file)
@@ -101,8 +101,8 @@ typedef struct
 \r
 typedef struct\r
 {\r
-  char providerId[37];\r
-  char * providerName;\r
+    char providerId[37];\r
+    char * providerName;\r
 } NSProviderInfo;\r
 \r
 #endif /* _NS_STRUCTS_H_ */\r
index ac67a94..00e1cbe 100644 (file)
@@ -245,7 +245,9 @@ OCEntityHandlerResult NSEntityHandlerMessageCb(OCEntityHandlerFlag flag,
     {\r
         NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_OBSERVE_FLAG");\r
 \r
-        if (OC_OBSERVE_REGISTER == entityHandlerRequest->obsInfo.action)\r
+        OCObserveAction ocObAction = entityHandlerRequest->obsInfo.action;\r
+\r
+        if (ocObAction == OC_OBSERVE_REGISTER)\r
         {\r
             NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_OBSERVE_REGISTER");\r
             NS_LOG_V(DEBUG, "NSEntityHandlerMessageCb\n"\r
@@ -253,6 +255,14 @@ OCEntityHandlerResult NSEntityHandlerMessageCb(OCEntityHandlerFlag flag,
             NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_RECV_SUBSCRIPTION,\r
                     NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
         }\r
+        else if(ocObAction == OC_OBSERVE_DEREGISTER)\r
+        {\r
+            NS_LOG(DEBUG, "NSEntityHandlerMessageCb - OC_OBSERVE_DEREGISTER");\r
+            NS_LOG_V(DEBUG, "NSEntityHandlerMessageCb\n - "\r
+                    "Deregister Message observerID : %d\n", entityHandlerRequest->obsInfo.obsId);\r
+            NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_RECV_UNSUBSCRIPTION,\r
+                    NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
+        }\r
     }\r
 \r
     OCPayloadDestroy(response.payload);\r
@@ -379,7 +389,10 @@ OCEntityHandlerResult NSEntityHandlerSyncCb(OCEntityHandlerFlag flag,
 \r
         NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_OBSERVE_FLAG");\r
 \r
-        if (OC_OBSERVE_REGISTER == entityHandlerRequest->obsInfo.action)\r
+\r
+        OCObserveAction ocObAction = entityHandlerRequest->obsInfo.action;\r
+\r
+        if (ocObAction == OC_OBSERVE_REGISTER)\r
         {\r
             NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_OBSERVE_REGISTER");\r
             NS_LOG_V(DEBUG, "NSEntityHandlerSyncCb\n - "\r
@@ -387,6 +400,14 @@ OCEntityHandlerResult NSEntityHandlerSyncCb(OCEntityHandlerFlag flag,
             NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SYNC_SUBSCRIPTION,\r
                     NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
         }\r
+        else if(ocObAction == OC_OBSERVE_DEREGISTER)\r
+        {\r
+            NS_LOG(DEBUG, "NSEntityHandlerSyncCb - OC_OBSERVE_DEREGISTER");\r
+            NS_LOG_V(DEBUG, "NSEntityHandlerSyncCb\n - "\r
+                    "Deregister Sync observerID : %d\n", entityHandlerRequest->obsInfo.obsId);\r
+            NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_RECV_UNSUBSCRIPTION,\r
+                    NSCopyOCEntityHandlerRequest(entityHandlerRequest));\r
+        }\r
     }\r
 \r
     OCPayloadDestroy(response.payload);\r
index cc1e792..339357f 100644 (file)
@@ -145,7 +145,7 @@ NSResult NSSendNotification(NSMessage *msg)
     }
 
     OCStackResult ocstackResult = OCNotifyListOfObservers(rHandle, obArray, obCount, payload,
-            OC_LOW_QOS);
+            OC_HIGH_QOS);
 
     NS_LOG_V(DEBUG, "Message ocstackResult = %d", ocstackResult);
 
@@ -216,7 +216,7 @@ NSResult NSSendSync(NSSyncInfo *sync)
     }
 
     OCStackResult ocstackResult = OCNotifyListOfObservers(rHandle, obArray,
-            obCount, payload, OC_LOW_QOS);
+            obCount, payload, OC_HIGH_QOS);
 
     NS_LOG_V(DEBUG, "Sync ocstackResult = %d", ocstackResult);
 
@@ -268,7 +268,6 @@ void * NSNotificationSchedule(void *ptr)
                     NSSendSync((NSSyncInfo*) node->taskData);
                     NSPushQueue(CALLBACK_RESPONSE_SCHEDULER, TASK_CB_SYNC, node->taskData);
                     break;
-
                 default:
                     NS_LOG(ERROR, "Unknown type message");
                     break;
index 91f0325..8ea355a 100644 (file)
@@ -209,36 +209,11 @@ void NSHandleUnsubscription(OCEntityHandlerRequest *entityHandlerRequest)
 {\r
     NS_LOG(DEBUG, "NSHandleUnsubscription - IN");\r
 \r
-    char * id = NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_CONSUMER_ID);\r
-\r
-    if(!id)\r
-    {\r
-        NSFreeOCEntityHandlerRequest(entityHandlerRequest);\r
-        NS_LOG(ERROR, "Invalid ConsumerID");\r
-        return;\r
-    }\r
-\r
-    NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
-    NSCacheSubData * subData = (NSCacheSubData *) OICMalloc(sizeof(NSCacheSubData));\r
-\r
-    OICStrcpy(subData->id, UUID_STRING_SIZE, id);\r
-    subData->isWhite = false;\r
-    subData->messageObId = entityHandlerRequest->obsInfo.obsId;\r
-\r
-    element->data = (void*) subData;\r
-    element->next = NULL;\r
-\r
-    NS_LOG_V(DEBUG, "SubList IP[ID] = [%s]", subData->id);\r
-    NS_LOG_V(DEBUG, "SubList observation ID = [%d]", subData->syncObId);\r
-\r
-    if (NSStorageWrite(consumerSubList, element) != NS_OK)\r
-    {\r
-        NS_LOG(ERROR, "fail to write consumer white list");\r
-    }\r
-\r
-    NS_LOG(DEBUG, "NSHandleUnsubscription - IN");\r
+    NSProviderDeleteSubDataFromObId(consumerSubList, entityHandlerRequest->obsInfo.obsId);\r
 \r
     NSFreeOCEntityHandlerRequest(entityHandlerRequest);\r
+\r
+    NS_LOG(DEBUG, "NSHandleUnsubscription - OUT");\r
 }\r
 \r
 void NSAskAcceptanceToUser(OCEntityHandlerRequest *entityHandlerRequest)\r
index fdf978b..bf761e5 100755 (executable)
@@ -316,7 +316,6 @@ bool NSProviderCompareIdCacheData(NSCacheType type, void * data, const char * id
     {\r
         NSCacheSubData * subData = (NSCacheSubData *) data;\r
 \r
-\r
         NS_LOG_V(DEBUG, "Data(subData) = [%s]", subData->id);\r
         NS_LOG_V(DEBUG, "Data(compData) = [%s]", id);\r
 \r
@@ -388,3 +387,66 @@ NSResult NSProviderDeleteCacheData(NSCacheType type, void * data)
     return NS_OK;\r
 }\r
 \r
+bool NSIsSameObId(NSCacheSubData * data, OCObservationId id)\r
+{\r
+    if (id == data->messageObId || id == data->syncObId || id == data->remote_messageObId ||\r
+                id == data->remote_syncObId)\r
+        return true;\r
+    return false;\r
+}\r
+\r
+NSResult NSProviderDeleteSubDataFromObId(NSCacheList * list, OCObservationId id)\r
+{\r
+    pthread_mutex_lock(&NSCacheMutex);\r
+    NSCacheElement * prev = list->head;\r
+    NSCacheElement * del = list->head;\r
+\r
+    NSCacheType type = list->cacheType;\r
+\r
+    bool isDelete = true;\r
+\r
+    while(isDelete)\r
+    {\r
+        NSCacheSubData * curr = (NSCacheSubData *)del->data;\r
+\r
+        isDelete = false;\r
+\r
+        if (NSIsSameObId(curr, id))\r
+        {\r
+            if (del == list->head) // first object\r
+            {\r
+                if (del == list->tail) // first object (one object)\r
+                    list->tail = del->next;\r
+\r
+                list->head = del->next;\r
+\r
+                NSProviderDeleteCacheData(type, del->data);\r
+                OICFree(del);\r
+                isDelete = true;\r
+            }\r
+        }\r
+        else\r
+        {\r
+            del = del->next;\r
+            while (del)\r
+            {\r
+                if (NSIsSameObId(curr, id))\r
+                {\r
+                    if (del == list->tail) // delete object same to last object\r
+                        list->tail = prev;\r
+\r
+                    prev->next = del->next;\r
+                    NSProviderDeleteCacheData(type, del->data);\r
+                    OICFree(del);\r
+                    isDelete = true;\r
+                    break;\r
+                }\r
+\r
+                prev = del;\r
+                del = del->next;\r
+            }\r
+        }\r
+    }\r
+    pthread_mutex_unlock(&NSCacheMutex);\r
+    return NS_OK;\r
+}\r
index 096d18b..218ce92 100755 (executable)
@@ -41,6 +41,8 @@ bool NSProviderIsFoundCacheData(NSCacheType, void *, void*);
 \r
 NSResult NSCacheUpdateSubScriptionState(NSCacheList *, char *, bool);\r
 \r
+NSResult NSProviderDeleteSubDataFromObId(NSCacheList * list, OCObservationId id);\r
+\r
 pthread_mutex_t NSCacheMutex;\r
 \r
 #endif /* _NS_PROVIDER_CACHEADAPTER__H_ */\r