Merge "Merge branch 'master' into notification-service" into notification-service
authorUze Choi <uzchoi@samsung.com>
Wed, 20 Jul 2016 07:34:14 +0000 (07:34 +0000)
committerGerrit Code Review <gerrit@172.30.200.205>
Wed, 20 Jul 2016 07:34:15 +0000 (07:34 +0000)
17 files changed:
service/notification/SConscript
service/notification/android/notification-service/src/main/jni/notificationProvider.h
service/notification/examples/linux/notificationprovider.c
service/notification/include/NSCommon.h
service/notification/include/NSProvider.h [moved from service/notification/include/NSProviderInterface.h with 100% similarity]
service/notification/src/common/NSConstants.h
service/notification/src/common/NSStructs.h
service/notification/src/provider/NSProvider.c [moved from service/notification/src/provider/NSProviderInterface.c with 64% similarity]
service/notification/src/provider/NSProviderCallbackResponse.c [new file with mode: 0644]
service/notification/src/provider/NSProviderCallbackResponse.h [new file with mode: 0644]
service/notification/src/provider/NSProviderNotification.c
service/notification/src/provider/NSProviderScheduler.c
service/notification/src/provider/NSProviderScheduler.h
service/notification/src/provider/NSProviderSubscription.c
service/notification/src/provider/NSProviderSystem.c
service/notification/src/provider/cache/linux/NSProviderMemoryCache.c
service/notification/unittest/NSProviderTest.cpp

index 75397e0..2da567e 100644 (file)
@@ -121,14 +121,14 @@ consumersdk = notification_env.StaticLibrary('notification_consumer', notificati
 notification_env.InstallTarget(consumersdk, 'libnotification_consumer')
 notification_env.UserInstallTargetLib(consumersdk, 'libnotification_consumer')
 
-notification_env.UserInstallTargetHeader('include/NSProviderInterface.h',\
-       'service/notification', 'NSProviderInterface.h')
+notification_env.UserInstallTargetHeader('include/NSProvider.h',\
+       'service/notification', 'NSProvider.h')
 notification_env.UserInstallTargetHeader('include/NSConsumerInterface.h',\
        'service/notification', 'NSConsumerInterface.h')
 
 # Go to build Unit test
 # if target_os == 'linux':
-#      SConscript('unittest/SConscript')
+#SConscript('unittest/SConscript')
 
 # Go to build sample apps
 SConscript('examples/SConscript')
index ffafb5c..9d6a057 100644 (file)
@@ -19,7 +19,8 @@
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
 \r
 #include <jni.h>\r
-#include "NSProviderInterface.h"\r
+\r
+#include "NSProvider.h"\r
 #include "NSCommon.h"\r
 \r
 #ifndef NOTIFICATION_JNI_H\r
index f4313e1..ff7343c 100644 (file)
@@ -1,29 +1,30 @@
-/******************************************************************\r
- *\r
- * Copyright 2015 Samsung Electronics All Rights Reserved.\r
- *\r
- *\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- *      http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- *\r
- ******************************************************************/\r
+//******************************************************************\r
+//\r
+// Copyright 2016 Samsung Electronics All Rights Reserved.\r
+//\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+//\r
+//      http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+//\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
 \r
 #include <stdio.h>\r
 #include <stdbool.h>\r
 #include <stdlib.h>\r
 #include <unistd.h>\r
+\r
+#include "NSProvider.h"\r
 #include "NSCommon.h"\r
-#include "NSProviderInterface.h"\r
 #include "logger.h"\r
 #include "octypes.h"\r
 #include "pthread.h"\r
 \r
 #define TAG "NSProviderExample"\r
 \r
+// Input the following values to publish resource to cloud\r
+char REMOTE_SERVER_ADDRESS[50];\r
+char REMOTE_SERVER_SESSION[50];\r
+\r
 extern char *strdup(const char *s);\r
 \r
 bool isExit = false;\r
@@ -45,7 +50,7 @@ void* OCProcessThread(void * ptr)
     {\r
         if (OCProcess() != OC_STACK_OK)\r
         {\r
-            OIC_LOG(ERROR, TAG, "OCStack process error");\r
+            printf("OCStack process error");\r
             return NULL;\r
         }\r
     }\r
@@ -55,7 +60,7 @@ void* OCProcessThread(void * ptr)
 \r
 void subscribeRequestCallback(NSConsumer *consumer)\r
 {\r
-    OIC_LOG(INFO, TAG, "consumer requested to subscribe");\r
+    printf("consumer requested to subscribe");\r
 \r
     printf("NS_APP Consumer Device ID: %s\n", consumer->consumerId);\r
 \r
@@ -64,7 +69,7 @@ void subscribeRequestCallback(NSConsumer *consumer)
 \r
 void syncCallback(NSSyncInfo *sync)\r
 {\r
-    OIC_LOG(INFO, TAG, "sync requested");\r
+    printf("sync requested");\r
 \r
     printf("NS_APP Sync State: %d\n", sync->state);\r
 }\r
@@ -75,27 +80,26 @@ OCStackApplicationResult CloudLoginoutCallback(void *ctx,
     int CtxValue = 0x99;\r
     if (ctx != (void *)CtxValue)\r
     {\r
-        OIC_LOG(INFO, TAG, "Invalid Cloud Login/out callback received");\r
+        printf("Invalid Cloud Login/out callback received");\r
     }\r
 \r
-    OIC_LOG(INFO, TAG, "Login/out response received");\r
+    printf("Login/out response received");\r
 \r
     if (clientResponse->payload != NULL &&\r
             clientResponse->payload->type == PAYLOAD_TYPE_REPRESENTATION)\r
     {\r
-        OIC_LOG(INFO, TAG, "PAYLOAD_TYPE_REPRESENTATION received");\r
+        printf("PAYLOAD_TYPE_REPRESENTATION received");\r
 \r
         OCRepPayloadValue *val = ((OCRepPayload *)clientResponse->payload)->values;\r
 \r
-        OIC_LOG(INFO, TAG, "Get payload values");\r
+        printf("Get payload values");\r
         while (val)\r
         {\r
-            OIC_LOG_V(INFO, TAG, "key: %s / Value: %s", val->name, val->str);\r
+            printf("key: %s / Value: %s", val->name, val->str);\r
             val = val->next;\r
         }\r
 \r
-        char *serverAddress = "coap+tcp://52.69.149.85:5683";\r
-        NSProviderEnableRemoteService(serverAddress);\r
+        NSProviderEnableRemoteService(REMOTE_SERVER_ADDRESS);\r
     }\r
 \r
     return OC_STACK_KEEP_TRANSACTION;\r
@@ -112,13 +116,7 @@ int main()
     int num;\r
     pthread_t processThread;\r
 \r
-    // cloud host address\r
-    const char *host = "coap+tcp://52.69.149.85:5683";\r
-    // cloud auth session\r
-    const char *auth_session = "gZDRuDyYapZXIcrs";\r
-\r
-\r
-    OIC_LOG(INFO, TAG, "NSStartProvider()");\r
+    printf("NSStartProvider()");\r
 \r
     // open oic_db\r
     static OCPersistentStorage ps = {server_fopen, fread, fwrite, fclose, unlink};\r
@@ -126,7 +124,7 @@ int main()
 \r
     if (OCInit(NULL, 0, OC_CLIENT_SERVER) != OC_STACK_OK)\r
     {\r
-        OIC_LOG(INFO, TAG, "OCStack init error");\r
+        printf("OCStack init error");\r
         return 0;\r
     }\r
 \r
@@ -141,7 +139,7 @@ int main()
         printf("3. NSSendNotification() \n");\r
         printf("4. NSRead \n");\r
         printf("5. NSStopProvider() \n");\r
-        printf("6. NSGetConsumerList \n");\r
+\r
         printf("11. NSCloudLogin \n");\r
         printf("12. NSCloudLogout \n");\r
         printf("0. Exit() \n");\r
@@ -156,15 +154,15 @@ int main()
         switch (num)\r
         {\r
             case 1:\r
-                OIC_LOG(INFO, TAG, "NSStartProvider(Accepter: Provider)");\r
+                printf("NSStartProvider(Accepter: Provider)");\r
                 NSStartProvider(NS_ACCESS_ALLOW, subscribeRequestCallback, syncCallback);\r
                 break;\r
             case 2:\r
-                OIC_LOG(INFO, TAG, "NSStartProvider(Accepter: Consumer)");\r
+                printf("NSStartProvider(Accepter: Consumer)");\r
                 NSStartProvider(NS_ACCESS_DENY, subscribeRequestCallback, syncCallback);\r
                 break;\r
             case 3:\r
-                OIC_LOG(INFO, TAG, "NSSendNotification()");\r
+                printf("NSSendNotification()");\r
 \r
                 char title[100];\r
                 char body[100];\r
@@ -191,7 +189,7 @@ int main()
                 break;\r
 \r
             case 4:\r
-                OIC_LOG(INFO, TAG, "NSRead");\r
+                printf("NSRead");\r
                 NSSyncInfo * sync = (NSSyncInfo*) OICMalloc(sizeof(NSSyncInfo));\r
 \r
                 sync->messageId = OICStrdup("dev_001");\r
@@ -202,27 +200,32 @@ int main()
             case 5:\r
                 NSStopProvider();\r
                 break;\r
-            case 6:\r
-                OIC_LOG(INFO, TAG, "NSGetConsumerList");\r
-                break;\r
+\r
             case 11:\r
-                OIC_LOG(INFO, TAG, "NSCloudLogin");\r
+                printf("NSCloudLogin");\r
+\r
+                printf("Cloud Address: ");\r
+                gets(REMOTE_SERVER_ADDRESS);\r
+\r
+                printf("Session Code: ");\r
+                gets(REMOTE_SERVER_SESSION);\r
+\r
 \r
-                NSCloudLogin(host, auth_session, CloudLoginoutCallback);\r
-                OIC_LOG(INFO, TAG, "OCCloudLogin requested");\r
+                NSCloudLogin(REMOTE_SERVER_ADDRESS, REMOTE_SERVER_SESSION, CloudLoginoutCallback);\r
+                printf("OCCloudLogin requested");\r
                 break;\r
             case 12:\r
-                OIC_LOG(INFO, TAG, "NSCloudLogout");\r
+                printf("NSCloudLogout");\r
 \r
-                NSCloudLogout(host, auth_session, CloudLoginoutCallback);\r
-                OIC_LOG(INFO, TAG, "OCCloudLogout requested");\r
+                NSCloudLogout(REMOTE_SERVER_ADDRESS, REMOTE_SERVER_SESSION, CloudLoginoutCallback);\r
+                printf("OCCloudLogout requested");\r
                 break;\r
             case 0:\r
                 NSStopProvider();\r
                 isExit = true;\r
                 break;\r
             default:\r
-                OIC_LOG(INFO, TAG, "Under Construction");\r
+                printf("Under Construction");\r
                 break;\r
         }\r
 \r
index 1a28092..e5c64bb 100644 (file)
@@ -27,8 +27,6 @@
 #ifndef _NS_COMMON_H_
 #define _NS_COMMON_H_
 
-#include <ocstack.h>
-
 #define NS_ATTRIBUTE_POLICY "ACCEPTER"
 #define NS_ATTRIBUTE_MESSAGE "MESSAGE_URI"
 #define NS_ATTRIBUTE_SYNC "SYNC_URI"
index fc1f04a..9db4b55 100644 (file)
@@ -93,7 +93,7 @@ typedef enum eConnectionState
 
 typedef enum eSchedulerType
 {
-    INTERFACE_SCHEDULER = 0,
+    CALLBACK_RESPONSE_SCHEDULER = 0,
     DISCOVERY_SCHEDULER = 1,
     SUBSCRIPTION_SCHEDULER = 2,
     NOTIFICATION_SCHEDULER = 3,
index e51f4ff..4ade4b1 100644 (file)
@@ -52,15 +52,17 @@ typedef struct
 \r
 typedef struct\r
 {\r
-    char id[37]; // ip\r
-    int syncObId;\r
-    int messageObId;\r
-    bool isWhite;\r
+    char id[37];\r
+    int syncObId; // sync resource observer ID for local consumer\r
+    int messageObId; // message resource observer ID for local consumer\r
+    int remote_syncObId; //sync observer ID subscribed through remote server\r
+    int remote_messageObId; //message observer ID subscribed through remote server\r
+    bool isWhite; // access state -> True: allowed / False: blocked\r
 } NSCacheSubData;\r
 \r
 typedef struct\r
 {\r
-    char * id; // ip ? ? ?\r
+    char * id;\r
     int messageType; // noti = 1, read = 2, dismiss = 3\r
     NSMessage * nsMessage;\r
 } NSCacheMsgData;\r
 //\r
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
 \r
-#include "NSProviderInterface.h"\r
+#include "NSProvider.h"\r
 #include "NSProviderScheduler.h"\r
 #include "NSProviderListener.h"\r
 #include "NSProviderSubscription.h"\r
 #include "NSProviderNotification.h"\r
+#include "NSProviderCallbackResponse.h"\r
 #include "NSStorageAdapter.h"\r
 #include "NSProviderMemoryCache.h"\r
 #include "oic_malloc.h"\r
@@ -32,8 +33,6 @@
 #include "oic_time.h"\r
 \r
 bool initProvider = false;\r
-static NSSubscribeRequestCallback g_subscribeRequestCb = NULL;\r
-static NSProviderSyncInfoCallback g_syncCb = NULL;\r
 \r
 pthread_mutex_t nsInitMutex;\r
 \r
@@ -43,34 +42,6 @@ void initializeMutex()
     nsInitMutex = initMutex;\r
 }\r
 \r
-void NSRegisterSubscribeRequestCb(NSSubscribeRequestCallback subscribeRequestCb)\r
-{\r
-    NS_LOG(DEBUG, "NSRegisterSubscribeRequestCb - IN");\r
-    g_subscribeRequestCb = subscribeRequestCb;\r
-    NS_LOG(DEBUG, "NSRegisterSubscribeRequestCb - OUT");\r
-}\r
-\r
-void  NSRegisterSyncCb(NSProviderSyncInfoCallback syncCb)\r
-{\r
-    NS_LOG(DEBUG, "NSRegisterSyncCb - IN");\r
-    g_syncCb = syncCb;\r
-    NS_LOG(DEBUG, "NSRegisterSyncCb - OUT");\r
-}\r
-\r
-void NSSubscribeRequestCb(NSConsumer *consumer)\r
-{\r
-    NS_LOG(DEBUG, "NSSubscribeRequestCb - IN");\r
-    g_subscribeRequestCb(consumer);\r
-    NS_LOG(DEBUG, "NSSubscribeRequestCb - OUT");\r
-}\r
-\r
-void NSSyncCb(NSSyncInfo *sync)\r
-{\r
-    NS_LOG(DEBUG, "NSSyncCb - IN");\r
-    g_syncCb(sync);\r
-    NS_LOG(DEBUG, "NSSyncCb - OUT");\r
-}\r
-\r
 NSResult NSStartProvider(NSAccessPolicy policy, NSSubscribeRequestCallback subscribeRequestCb,\r
         NSProviderSyncInfoCallback syncCb)\r
 {\r
@@ -88,8 +59,8 @@ NSResult NSStartProvider(NSAccessPolicy policy, NSSubscribeRequestCallback subsc
         NSSetSubscriptionAccessPolicy(policy);\r
         NSRegisterSubscribeRequestCb(subscribeRequestCb);\r
         NSRegisterSyncCb(syncCb);\r
-        CARegisterNetworkMonitorHandler(NSProviderAdapterStateListener,\r
-                NSProviderConnectionStateListener);\r
+        CARegisterNetworkMonitorHandler((CAAdapterStateChangedCB)NSProviderAdapterStateListener,\r
+                (CAConnectionStateChangedCB)NSProviderConnectionStateListener);\r
 \r
         NSSetList();\r
         NSInitScheduler();\r
@@ -250,66 +221,3 @@ NSMessage * NSCreateMessage()
     NS_LOG(DEBUG, "NSCreateMessage - OUT");\r
     return msg;\r
 }\r
-\r
-void * NSInterfaceSchedule(void * ptr)\r
-{\r
-    if (ptr == NULL)\r
-    {\r
-        NS_LOG(DEBUG, "Create NSReponseSchedule");\r
-    }\r
-\r
-    while (NSIsRunning[INTERFACE_SCHEDULER])\r
-    {\r
-        sem_wait(&NSSemaphore[INTERFACE_SCHEDULER]);\r
-        pthread_mutex_lock(&NSMutex[INTERFACE_SCHEDULER]);\r
-\r
-        if (NSHeadMsg[INTERFACE_SCHEDULER] != NULL)\r
-        {\r
-            NSTask *node = NSHeadMsg[INTERFACE_SCHEDULER];\r
-            NSHeadMsg[INTERFACE_SCHEDULER] = node->nextTask;\r
-\r
-            switch (node->taskType)\r
-            {\r
-                case TASK_CB_SUBSCRIPTION:\r
-                {\r
-                    NS_LOG(DEBUG, "CASE TASK_CB_SUBSCRIPTION : ");\r
-\r
-                    OCEntityHandlerRequest * request = (OCEntityHandlerRequest*)node->taskData;\r
-                    NSConsumer * consumer = (NSConsumer *)OICMalloc(sizeof(NSConsumer));\r
-\r
-                    char * consumerId = NSGetValueFromQuery(OICStrdup(request->query),\r
-                            NS_QUERY_CONSUMER_ID);\r
-\r
-                    if(consumerId)\r
-                    {\r
-                        OICStrcpy(consumer->consumerId, UUID_STRING_SIZE, consumerId);\r
-                        NSSubscribeRequestCb(consumer);\r
-                    }\r
-\r
-                    NSFreeConsumer(consumer);\r
-                    NSFreeOCEntityHandlerRequest(request);\r
-\r
-                    break;\r
-                }\r
-                case TASK_CB_SYNC:\r
-                {\r
-                    NS_LOG(DEBUG, "CASE TASK_CB_SYNC : ");\r
-                    NSSyncInfo * sync = (NSSyncInfo*)node->taskData;\r
-                    NSSyncCb(NSDuplicateSync(sync));\r
-                    NSFreeSync(sync);\r
-                    break;\r
-                }\r
-                default:\r
-                    NS_LOG(DEBUG, "No Task Type");\r
-                    break;\r
-            }\r
-            OICFree(node);\r
-        }\r
-\r
-        pthread_mutex_unlock(&NSMutex[INTERFACE_SCHEDULER]);\r
-    }\r
-\r
-    NS_LOG(DEBUG, "Destroy NSResponseSchedule");\r
-    return NULL;\r
-}\r
-\r
diff --git a/service/notification/src/provider/NSProviderCallbackResponse.c b/service/notification/src/provider/NSProviderCallbackResponse.c
new file mode 100644 (file)
index 0000000..d92afd6
--- /dev/null
@@ -0,0 +1,129 @@
+//******************************************************************\r
+//\r
+// Copyright 2016 Samsung Electronics All Rights Reserved.\r
+//\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+//\r
+//      http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+//\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
+\r
+#include "NSProvider.h"\r
+#include "NSProviderScheduler.h"\r
+#include "NSProviderListener.h"\r
+#include "NSProviderSubscription.h"\r
+#include "NSProviderNotification.h"\r
+#include "NSStorageAdapter.h"\r
+#include "NSProviderMemoryCache.h"\r
+#include "NSProviderCallbackResponse.h"\r
+#include "oic_malloc.h"\r
+#include "oic_string.h"\r
+#include "cautilinterface.h"\r
+#include "NSProviderSystem.h"\r
+#include "oic_time.h"\r
+\r
+static NSSubscribeRequestCallback g_subscribeRequestCb = NULL;\r
+static NSProviderSyncInfoCallback g_syncCb = NULL;\r
+\r
+pthread_mutex_t nsInitMutex;\r
+\r
+void NSRegisterSubscribeRequestCb(NSSubscribeRequestCallback subscribeRequestCb)\r
+{\r
+    NS_LOG(DEBUG, "NSRegisterSubscribeRequestCb - IN");\r
+    g_subscribeRequestCb = subscribeRequestCb;\r
+    NS_LOG(DEBUG, "NSRegisterSubscribeRequestCb - OUT");\r
+}\r
+\r
+void  NSRegisterSyncCb(NSProviderSyncInfoCallback syncCb)\r
+{\r
+    NS_LOG(DEBUG, "NSRegisterSyncCb - IN");\r
+    g_syncCb = syncCb;\r
+    NS_LOG(DEBUG, "NSRegisterSyncCb - OUT");\r
+}\r
+\r
+void NSSubscribeRequestCb(NSConsumer *consumer)\r
+{\r
+    NS_LOG(DEBUG, "NSSubscribeRequestCb - IN");\r
+    g_subscribeRequestCb(consumer);\r
+    NS_LOG(DEBUG, "NSSubscribeRequestCb - OUT");\r
+}\r
+\r
+void NSSyncCb(NSSyncInfo *sync)\r
+{\r
+    NS_LOG(DEBUG, "NSSyncCb - IN");\r
+    g_syncCb(sync);\r
+    NS_LOG(DEBUG, "NSSyncCb - OUT");\r
+}\r
+\r
+void * NSCallbackResponseSchedule(void * ptr)\r
+{\r
+    if (ptr == NULL)\r
+    {\r
+        NS_LOG(DEBUG, "Create NSReponseSchedule");\r
+    }\r
+\r
+    while (NSIsRunning[CALLBACK_RESPONSE_SCHEDULER])\r
+    {\r
+        sem_wait(&NSSemaphore[CALLBACK_RESPONSE_SCHEDULER]);\r
+        pthread_mutex_lock(&NSMutex[CALLBACK_RESPONSE_SCHEDULER]);\r
+\r
+        if (NSHeadMsg[CALLBACK_RESPONSE_SCHEDULER] != NULL)\r
+        {\r
+            NSTask *node = NSHeadMsg[CALLBACK_RESPONSE_SCHEDULER];\r
+            NSHeadMsg[CALLBACK_RESPONSE_SCHEDULER] = node->nextTask;\r
+\r
+            switch (node->taskType)\r
+            {\r
+                case TASK_CB_SUBSCRIPTION:\r
+                {\r
+                    NS_LOG(DEBUG, "CASE TASK_CB_SUBSCRIPTION : ");\r
+\r
+                    OCEntityHandlerRequest * request = (OCEntityHandlerRequest*)node->taskData;\r
+                    NSConsumer * consumer = (NSConsumer *)OICMalloc(sizeof(NSConsumer));\r
+\r
+                    char * consumerId = NSGetValueFromQuery(OICStrdup(request->query),\r
+                            NS_QUERY_CONSUMER_ID);\r
+\r
+                    if(consumerId)\r
+                    {\r
+                        OICStrcpy(consumer->consumerId, UUID_STRING_SIZE, consumerId);\r
+                        NSSubscribeRequestCb(consumer);\r
+                    }\r
+\r
+                    NSFreeConsumer(consumer);\r
+                    NSFreeOCEntityHandlerRequest(request);\r
+\r
+                    break;\r
+                }\r
+                case TASK_CB_SYNC:\r
+                {\r
+                    NS_LOG(DEBUG, "CASE TASK_CB_SYNC : ");\r
+                    NSSyncInfo * sync = (NSSyncInfo*)node->taskData;\r
+                    NSSyncCb(NSDuplicateSync(sync));\r
+                    NSFreeSync(sync);\r
+                    break;\r
+                }\r
+                default:\r
+                    NS_LOG(DEBUG, "No Task Type");\r
+                    break;\r
+            }\r
+            OICFree(node);\r
+        }\r
+\r
+        pthread_mutex_unlock(&NSMutex[CALLBACK_RESPONSE_SCHEDULER]);\r
+    }\r
+\r
+    NS_LOG(DEBUG, "Destroy NSResponseSchedule");\r
+    return NULL;\r
+}\r
+\r
diff --git a/service/notification/src/provider/NSProviderCallbackResponse.h b/service/notification/src/provider/NSProviderCallbackResponse.h
new file mode 100644 (file)
index 0000000..d0d8275
--- /dev/null
@@ -0,0 +1,37 @@
+//******************************************************************\r
+//\r
+// Copyright 2016 Samsung Electronics All Rights Reserved.\r
+//\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+//\r
+//      http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+//\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
+\r
+#ifndef _NS_PROVIDER_CALLBACK_RESPONSE__H_\r
+#define _NS_PROVIDER_CALLBACK_RESPONSE__H_\r
+\r
+#include <string.h>\r
+#include "logger.h"\r
+#include "NSCommon.h"\r
+#include "NSConstants.h"\r
+#include "oic_malloc.h"\r
+#include "NSStructs.h"\r
+#include "NSUtil.h"\r
+\r
+void NSRegisterSubscribeRequestCb(NSSubscribeRequestCallback subscribeRequestCb);\r
+void NSRegisterSyncCb(NSProviderSyncInfoCallback syncCb);\r
+void NSSubscribeRequestCb(NSConsumer *consumer);\r
+void NSSyncCb(NSSyncInfo *sync);\r
+\r
+#endif /* _NS_PROVIDER_CALLBACK_RESPONSE__H_ */\r
index b3fd1f8..cc1e792 100644 (file)
@@ -113,14 +113,20 @@ NSResult NSSendNotification(NSMessage *msg)
     while (it)
     {
         NSCacheSubData * subData = (NSCacheSubData *) it->data;
-        NS_LOG_V(DEBUG, "subData->id = %s", subData->id);
+        NS_LOG_V(DEBUG, "message subData->id = %s", subData->id);
         NS_LOG_V(DEBUG, "subData->messageId = %d", subData->messageObId);
-        NS_LOG_V(DEBUG, "subData->obID = %d", subData->syncObId);
+        NS_LOG_V(DEBUG, "subData->cloud_messageId = %d", subData->remote_messageObId);
+        NS_LOG_V(DEBUG, "subData->syncId = %d", subData->syncObId);
+        NS_LOG_V(DEBUG, "subData->cloud_syncId = %d", subData->remote_syncObId);
         NS_LOG_V(DEBUG, "subData->isWhite = %d", subData->isWhite);
 
         if (subData->isWhite)
         {
-            obArray[obCount++] = subData->messageObId;
+            if(subData->messageObId != 0)
+                obArray[obCount++] = subData->messageObId;
+
+            if(subData->remote_messageObId != 0)
+                obArray[obCount++] = subData->remote_messageObId;
         }
         it = it->next;
     }
@@ -177,9 +183,20 @@ NSResult NSSendSync(NSSyncInfo *sync)
     while (it)
     {
         NSCacheSubData * subData = (NSCacheSubData *) it->data;
+        NS_LOG_V(DEBUG, "sync subData->id = %s", subData->id);
+        NS_LOG_V(DEBUG, "subData->messageId = %d", subData->messageObId);
+        NS_LOG_V(DEBUG, "subData->cloud_messageId = %d", subData->remote_messageObId);
+        NS_LOG_V(DEBUG, "subData->syncId = %d", subData->syncObId);
+        NS_LOG_V(DEBUG, "subData->cloud_syncId = %d", subData->remote_syncObId);
+        NS_LOG_V(DEBUG, "subData->isWhite = %d", subData->isWhite);
+
         if (subData->isWhite)
         {
-            obArray[obCount++] = subData->syncObId;
+            if(subData->syncObId != 0)
+                obArray[obCount++] = subData->syncObId;
+
+            if(subData->remote_syncObId != 0)
+                obArray[obCount++] = subData->remote_syncObId;
         }
         it = it->next;
     }
@@ -249,7 +266,7 @@ void * NSNotificationSchedule(void *ptr)
                 case TASK_RECV_READ:
                     NS_LOG(DEBUG, "CASE TASK_RECV_READ : ");
                     NSSendSync((NSSyncInfo*) node->taskData);
-                    NSPushQueue(INTERFACE_SCHEDULER, TASK_CB_SYNC, node->taskData);
+                    NSPushQueue(CALLBACK_RESPONSE_SCHEDULER, TASK_CB_SYNC, node->taskData);
                     break;
 
                 default:
index 072866c..9e9173f 100755 (executable)
 pthread_t NSThread[THREAD_COUNT];\r
 pthread_mutex_t NSMutex[THREAD_COUNT];\r
 sem_t NSSemaphore[THREAD_COUNT];\r
-bool NSIsRunning[THREAD_COUNT] =\r
-{ false, };\r
+bool NSIsRunning[THREAD_COUNT] = { false, };\r
 \r
 NSTask* NSHeadMsg[THREAD_COUNT];\r
 NSTask* NSTailMsg[THREAD_COUNT];\r
 \r
-void * NSInterfaceSchedule(void *ptr);\r
+void * NSCallbackResponseSchedule(void *ptr);\r
 void * NSDiscoverySchedule(void *ptr);\r
 void * NSSubScriptionSchedule(void *ptr);\r
 void * NSNotificationSchedule(void *ptr);\r
@@ -62,10 +61,10 @@ bool NSStartScheduler()
 \r
         switch (i)\r
         {\r
-            case INTERFACE_SCHEDULER:\r
+            case CALLBACK_RESPONSE_SCHEDULER:\r
             {\r
                 NS_LOG(DEBUG, "CASE RESPONSE_SCHEDULER :");\r
-                pthread_create(&NSThread[i], NULL, NSInterfaceSchedule, NULL);\r
+                pthread_create(&NSThread[i], NULL, NSCallbackResponseSchedule, NULL);\r
             }\r
                 break;\r
 \r
@@ -184,7 +183,7 @@ void NSFreeData(NSSchedulerType type, NSTask * task)
 {\r
     NS_LOG(DEBUG, "NSFreeData - IN");\r
 \r
-    if (type == INTERFACE_SCHEDULER)\r
+    if (type == CALLBACK_RESPONSE_SCHEDULER)\r
     {\r
         switch (task->taskType)\r
         {\r
index 961e193..cd3b7a9 100755 (executable)
@@ -42,7 +42,7 @@ extern pthread_mutex_t NSMutex[THREAD_COUNT];
 extern sem_t NSSemaphore[THREAD_COUNT];\r
 extern bool NSIsRunning[THREAD_COUNT];\r
 \r
-extern void * NSResponseSchedule(void *ptr);\r
+extern void * NSCallbackResponseSchedule(void *ptr);\r
 extern void * NSDiscoverySchedule(void *ptr);\r
 extern void * NSSubScriptionSchedule(void *ptr);\r
 extern void * NSNotificationSchedule(void *ptr);\r
index c770bca..91f0325 100644 (file)
@@ -82,6 +82,8 @@ NSResult NSSendAccessPolicyResponse(OCEntityHandlerRequest *entityHandlerRequest
         return NS_ERROR;\r
     }\r
 \r
+    NS_LOG_V(DEBUG, "NS Provider ID: %s", NSGetProviderInfo()->providerId);\r
+\r
     OCRepPayloadSetUri(payload, NS_ROOT_URI);\r
     OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId);\r
     OCRepPayloadSetPropInt(payload, NS_ATTRIBUTE_POLICY, NSGetSubscriptionAccepter());\r
@@ -128,17 +130,26 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour
         NSCacheSubData * subData = (NSCacheSubData *) OICMalloc(sizeof(NSCacheSubData));\r
 \r
         OICStrcpy(subData->id, UUID_STRING_SIZE, id);\r
+        NS_LOG_V(DEBUG, "SubList ID = [%s]", subData->id);\r
 \r
+        NS_LOG_V(DEBUG, "Consumer Address: %s", entityHandlerRequest->devAddr.addr);\r
+        if(NSIsRemoteServerAddress(entityHandlerRequest->devAddr.addr))\r
+        {\r
+            NS_LOG(DEBUG, "Requested by remote server");\r
+            subData->remote_messageObId = entityHandlerRequest->obsInfo.obsId;\r
+            NS_LOG_V(DEBUG, "SubList message observation ID = [%d]", subData->remote_messageObId);\r
+        }\r
+        else\r
+        {\r
+            NS_LOG(DEBUG, "Requested by local consumer");\r
+            subData->messageObId = entityHandlerRequest->obsInfo.obsId;\r
+            NS_LOG_V(DEBUG, "SubList message observation ID = [%d]", subData->messageObId);\r
+        }\r
         subData->isWhite = false;\r
-        subData->messageObId = entityHandlerRequest->obsInfo.obsId;\r
-        subData->syncObId = 0;\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 message observation ID = [%d]", subData->messageObId);\r
-\r
         if (NSStorageWrite(consumerSubList, element) != NS_OK)\r
         {\r
             NS_LOG(DEBUG, "fail to write cache");\r
@@ -160,19 +171,29 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour
         NS_LOG(DEBUG, "resourceType == NS_RESOURCE_SYNC");\r
         NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
         NSCacheSubData * subData = (NSCacheSubData *) OICMalloc(sizeof(NSCacheSubData));\r
+\r
         OICStrcpy(subData->id, UUID_STRING_SIZE, id);\r
+        NS_LOG_V(DEBUG, "SubList ID = [%s]", subData->id);\r
 \r
+        NS_LOG_V(DEBUG, "Consumer Address: %s", entityHandlerRequest->devAddr.addr);\r
+        if(NSIsRemoteServerAddress(entityHandlerRequest->devAddr.addr))\r
+        {\r
+            NS_LOG(DEBUG, "Requested by remote server");\r
+            subData->remote_syncObId = entityHandlerRequest->obsInfo.obsId;\r
+            NS_LOG_V(DEBUG, "SubList sync observation ID = [%d]", subData->remote_syncObId);\r
+        }\r
+        else\r
+        {\r
+            NS_LOG(DEBUG, "Requested by local consumer");\r
+            subData->syncObId = entityHandlerRequest->obsInfo.obsId;\r
+            NS_LOG_V(DEBUG, "SubList sync observation ID = [%d]", subData->syncObId);\r
+        }\r
 \r
         subData->isWhite = false;\r
-        subData->syncObId = entityHandlerRequest->obsInfo.obsId;\r
-        subData->messageObId = 0;\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 sync observation ID = [%d]", subData->syncObId);\r
-\r
         if (NSStorageWrite(consumerSubList, element) != NS_OK)\r
         {\r
             NS_LOG(ERROR, "Fail to write cache");\r
@@ -224,7 +245,7 @@ void NSAskAcceptanceToUser(OCEntityHandlerRequest *entityHandlerRequest)
 {\r
     NS_LOG(DEBUG, "NSAskAcceptanceToUser - IN");\r
 \r
-    NSPushQueue(INTERFACE_SCHEDULER, TASK_CB_SUBSCRIPTION, entityHandlerRequest);\r
+    NSPushQueue(CALLBACK_RESPONSE_SCHEDULER, TASK_CB_SUBSCRIPTION, entityHandlerRequest);\r
 \r
     NS_LOG(DEBUG, "NSAskAcceptanceToUser - OUT");\r
 }\r
index a9a69aa..2a6c6ee 100644 (file)
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
 #include "NSProviderSystem.h"\r
 \r
+#define MAX_SERVER_ADDRESS 32\r
 static NSConnectionState NSProviderConnectionState;\r
+static char NSRemoteServerAddress[MAX_SERVER_ADDRESS] = {0,};\r
+\r
 NSProviderInfo * providerInfo;\r
 \r
 void NSSetProviderConnectionState(NSConnectionState state)\r
@@ -36,6 +39,31 @@ NSConnectionState NSGetProviderConnectionState()
     return NSProviderConnectionState;\r
 }\r
 \r
+void NSSetRemoteServerAddress(char *serverAddress)\r
+{\r
+\r
+    OICStrcpy(NSRemoteServerAddress, MAX_SERVER_ADDRESS, serverAddress);\r
+}\r
+\r
+void NSDeleteRemoteServerAddress(char *serverAddress)\r
+{\r
+    NS_LOG_V(DEBUG, "Delete cloud address: %s", serverAddress);\r
+\r
+    memset(NSRemoteServerAddress, 0, MAX_SERVER_ADDRESS);\r
+}\r
+\r
+bool NSIsRemoteServerAddress(char *serverAddress)\r
+{\r
+    NS_LOG_V(DEBUG, "Check server address: %s", serverAddress);\r
+\r
+    if(serverAddress != NULL)\r
+    {\r
+        return strstr(NSRemoteServerAddress, serverAddress);\r
+    }\r
+\r
+    return false;\r
+}\r
+\r
 void NSInitProviderInfo()\r
 {\r
     NS_LOG(DEBUG, "NSInitProviderInfo");\r
index 8ce8f97..fdf978b 100755 (executable)
@@ -99,6 +99,8 @@ NSResult NSCacheUpdateSubScriptionState(NSCacheList * list, char * id, bool stat
             NS_LOG_V(DEBUG, "currData_ID = %s", itData->id);\r
             NS_LOG_V(DEBUG, "currData_MsgObID = %d", itData->messageObId);\r
             NS_LOG_V(DEBUG, "currData_SyncObID = %d", itData->syncObId);\r
+            NS_LOG_V(DEBUG, "currData_Cloud_MsgObID = %d", itData->remote_messageObId);\r
+            NS_LOG_V(DEBUG, "currData_Cloud_SyncObID = %d", itData->remote_syncObId);\r
             NS_LOG_V(DEBUG, "currData_IsWhite = %d", itData->isWhite);\r
 \r
             NS_LOG_V(DEBUG, "update state = %d", state);\r
@@ -156,23 +158,38 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)
                 NS_LOG_V(DEBUG, "currData_ID = %s", itData->id);\r
                 NS_LOG_V(DEBUG, "currData_MsgObID = %d", itData->messageObId);\r
                 NS_LOG_V(DEBUG, "currData_SyncObID = %d", itData->syncObId);\r
+                NS_LOG_V(DEBUG, "currData_Cloud_MsgObID = %d", itData->remote_messageObId);\r
+                NS_LOG_V(DEBUG, "currData_Cloud_SyncObID = %d", itData->remote_syncObId);\r
                 NS_LOG_V(DEBUG, "currData_IsWhite = %d", itData->isWhite);\r
 \r
                 NS_LOG_V(DEBUG, "subData_ID = %s", subData->id);\r
                 NS_LOG_V(DEBUG, "subData_MsgObID = %d", subData->messageObId);\r
                 NS_LOG_V(DEBUG, "subData_SyncObID = %d", subData->syncObId);\r
+                NS_LOG_V(DEBUG, "subData_Cloud_MsgObID = %d", subData->remote_messageObId);\r
+                NS_LOG_V(DEBUG, "subData_Cloud_SyncObID = %d", subData->remote_syncObId);\r
                 NS_LOG_V(DEBUG, "subData_IsWhite = %d", subData->isWhite);\r
 \r
-                if (itData->messageObId == 0)\r
+                if (subData->messageObId != 0)\r
                 {\r
                     itData->messageObId = subData->messageObId;\r
                 }\r
 \r
-                if (itData->syncObId == 0)\r
+                if (subData->syncObId != 0)\r
                 {\r
                     itData->syncObId = subData->syncObId;\r
                 }\r
 \r
+                if (subData->remote_messageObId != 0)\r
+                {\r
+                    itData->remote_messageObId = subData->remote_messageObId;\r
+                }\r
+\r
+                if (subData->remote_syncObId != 0)\r
+                {\r
+                    itData->remote_syncObId = subData->remote_syncObId;\r
+                    NS_LOG_V(DEBUG, "sync id cached: %d", itData->remote_syncObId);\r
+                }\r
+\r
                 NS_LOG(DEBUG, "Update Data - OUT");\r
 \r
                 pthread_mutex_unlock(&NSCacheMutex);\r
index 41c7fab..782bbc5 100644 (file)
@@ -18,6 +18,8 @@
 //
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
+#include "../include/NSProvider.h"
+
 #include <gtest/gtest.h>
 #include <HippoMocks/hippomocks.h>
 #include <atomic>
@@ -29,7 +31,6 @@
 #include "NSConsumerSimulator.h"
 
 #include "NSCommon.h"
-#include "NSProviderInterface.h"
 
 namespace
 {