Add logic for NS_FAIL Case in API.
authorjaesick.shin <jaesick.shin@samsung.com>
Fri, 2 Sep 2016 05:43:02 +0000 (14:43 +0900)
committerUze Choi <uzchoi@samsung.com>
Fri, 2 Sep 2016 09:30:30 +0000 (09:30 +0000)
Add NS_FAIL case in API.

Change-Id: I597cf9ed3c76aa2621aacef36305beb01130d11a
Signed-off-by: jaesick.shin <jaesick.shin@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/11323
Reviewed-by: Uze Choi <uzchoi@samsung.com>
Tested-by: Uze Choi <uzchoi@samsung.com>
service/notification/src/provider/NSProviderInterface.c

index 0fbd5ed..f16335c 100644 (file)
-//******************************************************************\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 "NSProviderInterface.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 "NSProviderTopic.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
-bool initProvider = false;\r
-\r
-pthread_mutex_t nsInitMutex;\r
-\r
-void initializeMutex()\r
-{\r
-    static pthread_mutex_t initMutex = PTHREAD_MUTEX_INITIALIZER;\r
-    nsInitMutex = initMutex;\r
-}\r
-\r
-NSResult NSStartProvider(NSProviderConfig config)\r
-{\r
-    NS_LOG(DEBUG, "NSStartProvider - IN");\r
-\r
-    initializeMutex();\r
-\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    if (!initProvider)\r
-    {\r
-        NS_LOG(DEBUG, "Init Provider");\r
-        initProvider = true;\r
-        NSInitProviderInfo(config.userInfo);\r
-        NSSetSubscriptionAccessPolicy(config.policy);\r
-        NSRegisterSubscribeRequestCb(config.subRequestCallback);\r
-        NSRegisterSyncCb(config.syncInfoCallback);\r
-        CARegisterNetworkMonitorHandler((CAAdapterStateChangedCB)NSProviderAdapterStateListener,\r
-                (CAConnectionStateChangedCB)NSProviderConnectionStateListener);\r
-\r
-        NSSetList();\r
-        NSInitScheduler();\r
-        NSStartScheduler();\r
-\r
-        NSPushQueue(DISCOVERY_SCHEDULER, TASK_START_PRESENCE, NULL);\r
-        NSPushQueue(DISCOVERY_SCHEDULER, TASK_REGISTER_RESOURCE, NULL);\r
-    }\r
-    else\r
-    {\r
-        NS_LOG(DEBUG, "Already started Notification Provider");\r
-    }\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-\r
-    NS_LOG(DEBUG, "NSStartProvider - OUT");\r
-    return NS_OK;\r
-}\r
-\r
-void NSSetList()\r
-{\r
-    NS_LOG(DEBUG, "NSSetList - IN");\r
-\r
-    pthread_mutexattr_init(&NSCacheMutexAttr);\r
-    pthread_mutexattr_settype(&NSCacheMutexAttr, PTHREAD_MUTEX_RECURSIVE);\r
-    pthread_mutex_init(&NSCacheMutex, &NSCacheMutexAttr);\r
-\r
-    NSInitSubscriptionList();\r
-    NSInitTopicList();\r
-    NS_LOG(DEBUG, "NSSetList - OUT");\r
-}\r
-\r
-void NSDestroyList()\r
-{\r
-    NSStorageDestroy(consumerSubList);\r
-    NSStorageDestroy(consumerTopicList);\r
-    NSStorageDestroy(registeredTopicList);\r
-\r
-    pthread_mutex_destroy(&NSCacheMutex);\r
-    pthread_mutexattr_destroy(&NSCacheMutexAttr);\r
-}\r
-\r
-NSResult NSStopProvider()\r
-{\r
-    NS_LOG(DEBUG, "NSStopProvider - IN");\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    if(initProvider)\r
-    {\r
-        NSPushQueue(DISCOVERY_SCHEDULER, TASK_STOP_PRESENCE, NULL);\r
-        NSDeinitProviderInfo();\r
-        NSUnRegisterResource();\r
-        NSRegisterSubscribeRequestCb((NSSubscribeRequestCallback)NULL);\r
-        NSRegisterSyncCb((NSProviderSyncInfoCallback)NULL);\r
-        NSStopScheduler();\r
-        NSDestroyList();\r
-\r
-        initProvider = false;\r
-    }\r
-\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-    NS_LOG(DEBUG, "NSStopProvider - OUT");\r
-    return NS_OK;\r
-}\r
-\r
-NSResult NSProviderEnableRemoteService(char *serverAddress)\r
-{\r
-#if(defined WITH_CLOUD && defined RD_CLIENT)\r
-    NS_LOG(DEBUG, "NSProviderEnableRemoteService - IN");\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    if(!initProvider)\r
-    {\r
-        NS_LOG(DEBUG, "Provider service has not been started yet");\r
-        pthread_mutex_unlock(&nsInitMutex);\r
-        return NS_FAIL;\r
-    }\r
-    NS_LOG_V(DEBUG, "Remote server address: %s", serverAddress);\r
-    NS_LOG(DEBUG, "Request to publish resource");\r
-    NSPushQueue(DISCOVERY_SCHEDULER, TASK_PUBLISH_RESOURCE, serverAddress);\r
-\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-    NS_LOG(DEBUG, "NSProviderEnableRemoteService - OUT");\r
-    return NS_OK;\r
-#endif\r
-    NS_LOG_V(DEBUG, "Not logged in remote server: %s", serverAddress);\r
-    return NS_FAIL;\r
-}\r
-\r
-NSResult NSProviderDisableRemoteService(char *serverAddress)\r
-{\r
-#if(defined WITH_CLOUD && defined RD_CLIENT)\r
-    NS_LOG(DEBUG, "NSProviderDisableRemoteService - IN");\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    if(!initProvider)\r
-    {\r
-        NS_LOG(DEBUG, "Provider service has not been started yet");\r
-        return NS_FAIL;\r
-    }\r
-    NS_LOG_V(DEBUG, "Remote server address: %s", serverAddress);\r
-\r
-    NS_LOG(DEBUG, "Delete remote server info");\r
-    NSDeleteRemoteServerAddress(serverAddress);\r
-\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-    NS_LOG(DEBUG, "NSProviderDisableRemoteService - OUT");\r
-    return NS_OK;\r
-#endif\r
-    NS_LOG_V(DEBUG, "Not logged in remote server : %s", serverAddress);\r
-    return NS_FAIL;\r
-}\r
-\r
-NSResult NSSendMessage(NSMessage * msg)\r
-{\r
-    NS_LOG(DEBUG, "NSSendNotification - IN");\r
-\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    if(msg == NULL)\r
-    {\r
-        NS_LOG(ERROR, "Msg is NULL");\r
-        pthread_mutex_unlock(&nsInitMutex);\r
-        return NS_ERROR;\r
-    }\r
-\r
-    NSMessage * newMsg = NSDuplicateMessage(msg);\r
-    NSPushQueue(NOTIFICATION_SCHEDULER, TASK_SEND_NOTIFICATION, newMsg);\r
-\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-\r
-    NS_LOG(DEBUG, "NSSendNotification - OUT");\r
-    return NS_OK;\r
-}\r
-\r
-NSResult NSProviderSendSyncInfo(uint64_t messageId, NSSyncType type)\r
-{\r
-    NS_LOG(DEBUG, "NSProviderReadCheck - IN");\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    NSSyncInfo * syncInfo = (NSSyncInfo *)OICMalloc(sizeof(NSSyncInfo));\r
-    OICStrcpy(syncInfo->providerId, UUID_STRING_SIZE, NSGetProviderInfo()->providerId);\r
-    syncInfo->messageId = messageId;\r
-    syncInfo->state = type;\r
-    NSPushQueue(NOTIFICATION_SCHEDULER, TASK_SEND_READ, syncInfo);\r
-\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-    NS_LOG(DEBUG, "NSProviderReadCheck - OUT");\r
-    return NS_OK;\r
-}\r
-\r
-NSResult NSAcceptSubscription(const char * consumerId, bool accepted)\r
-{\r
-    NS_LOG(DEBUG, "NSAccept - IN");\r
-\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    char * newConsumerId = OICStrdup(consumerId);\r
-    if(accepted)\r
-    {\r
-        NS_LOG(DEBUG, "accepted is true - ALLOW");\r
-        NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SEND_ALLOW, newConsumerId);\r
-    }\r
-    else\r
-    {\r
-        NS_LOG(DEBUG, "accepted is false - DENY");\r
-        NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SEND_DENY, newConsumerId);\r
-    }\r
-\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-    NS_LOG(DEBUG, "NSAccept - OUT");\r
-    return NS_OK;\r
-}\r
-\r
-NSMessage * NSCreateMessage()\r
-{\r
-    NS_LOG(DEBUG, "NSCreateMessage - IN");\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    NSMessage * msg = NSInitializeMessage();\r
-    OICStrcpy(msg->providerId, UUID_STRING_SIZE, NSGetProviderInfo()->providerId);\r
-\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-    NS_LOG(DEBUG, "NSCreateMessage - OUT");\r
-    return msg;\r
-}\r
-\r
-NSTopicLL * NSProviderGetConsumerTopics(const char * consumerId)\r
-{\r
-    NS_LOG(DEBUG, "NSProviderGetConsumerTopics - IN");\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    if(!consumerId)\r
-    {\r
-        NS_LOG(DEBUG, "consumer id should be set");\r
-        pthread_mutex_unlock(&nsInitMutex);\r
-        return NULL;\r
-    }\r
-\r
-    NSTopicLL * topics = NSProviderGetConsumerTopicsCacheData(registeredTopicList,\r
-            consumerTopicList, consumerId);\r
-\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-    return topics;\r
-}\r
-\r
-NSTopicLL * NSProviderGetTopics()\r
-{\r
-    NS_LOG(DEBUG, "NSProviderGetTopics - IN");\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    NSTopicLL * topics = NSProviderGetTopicsCacheData(registeredTopicList);\r
-\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-    NS_LOG(DEBUG, "NSProviderGetTopics - OUT");\r
-\r
-    return topics;\r
-}\r
-\r
-NSResult NSProviderRegisterTopic(const char * topicName)\r
-{\r
-    NS_LOG(DEBUG, "NSProviderAddTopics - IN");\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    if(!topicName)\r
-    {\r
-        pthread_mutex_unlock(&nsInitMutex);\r
-        NS_LOG(DEBUG, "topic Name should be set");\r
-        return NS_FAIL;\r
-    }\r
-\r
-    NSPushQueue(TOPIC_SCHEDULER, TASK_ADD_TOPIC, OICStrdup(topicName));\r
-\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-    NS_LOG(DEBUG, "NSProviderAddTopics - OUT");\r
-    return NS_OK;\r
-}\r
-\r
-NSResult NSProviderUnregisterTopic(const char * topicName)\r
-{\r
-    NS_LOG(DEBUG, "NSProviderDeleteTopics - IN");\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    if(!topicName)\r
-    {\r
-        pthread_mutex_unlock(&nsInitMutex);\r
-        NS_LOG(DEBUG, "topic Name should be set");\r
-        return NS_FAIL;\r
-    }\r
-\r
-    NSPushQueue(TOPIC_SCHEDULER, TASK_DELETE_TOPIC, (void *) topicName);\r
-\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-    NS_LOG(DEBUG, "NSProviderDeleteTopics - OUT");\r
-    return NS_OK;\r
-}\r
-\r
-NSResult NSProviderSetConsumerTopic(const char * consumerId, const char * topicName)\r
-{\r
-    NS_LOG(DEBUG, "NSProviderSelectTopics - IN");\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    if(!consumerId || !topicName || !NSGetPolicy())\r
-    {\r
-        NS_LOG(DEBUG, "consumer id should be set for topic subscription or "\r
-                "Configuration must set to true.");\r
-        pthread_mutex_unlock(&nsInitMutex);\r
-        return NS_FAIL;\r
-    }\r
-\r
-    NSCacheTopicSubData * topicSubData =\r
-            (NSCacheTopicSubData *) OICMalloc(sizeof(NSCacheTopicSubData));\r
-\r
-    OICStrcpy(topicSubData->id, NS_UUID_STRING_SIZE, consumerId);\r
-    topicSubData->topicName = OICStrdup(topicName);\r
-\r
-    NSPushQueue(TOPIC_SCHEDULER, TASK_SUBSCRIBE_TOPIC, (void *)topicSubData);\r
-\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-    NS_LOG(DEBUG, "NSProviderSelectTopics - OUT");\r
-    return NS_OK;\r
-}\r
-\r
-NSResult NSProviderUnsetConsumerTopic(const char * consumerId, const char * topicName)\r
-{\r
-    NS_LOG(DEBUG, "NSProviderUnselectTopics - IN");\r
-    pthread_mutex_lock(&nsInitMutex);\r
-\r
-    if(!consumerId || !topicName || !NSGetPolicy())\r
-    {\r
-        NS_LOG(DEBUG, "consumer id should be set for topic subscription or "\r
-                "Configuration must set to true.");\r
-        pthread_mutex_unlock(&nsInitMutex);\r
-        return NS_FAIL;\r
-    }\r
-\r
-    NSCacheTopicSubData * topicSubData =\r
-            (NSCacheTopicSubData *) OICMalloc(sizeof(NSCacheTopicSubData));\r
-\r
-    OICStrcpy(topicSubData->id, NS_UUID_STRING_SIZE, consumerId);\r
-    topicSubData->topicName = OICStrdup(topicName);\r
-\r
-    NSPushQueue(TOPIC_SCHEDULER, TASK_UNSUBSCRIBE_TOPIC, (void *)topicSubData);\r
-\r
-    pthread_mutex_unlock(&nsInitMutex);\r
-    NS_LOG(DEBUG, "NSProviderUnselectTopics - OUT");\r
-    return NS_OK;\r
-}\r
-\r
+//******************************************************************
+//
+// Copyright 2016 Samsung Electronics All Rights Reserved.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+#include "NSProviderInterface.h"
+#include "NSProviderScheduler.h"
+#include "NSProviderListener.h"
+#include "NSProviderSubscription.h"
+#include "NSProviderNotification.h"
+#include "NSProviderCallbackResponse.h"
+#include "NSStorageAdapter.h"
+#include "NSProviderMemoryCache.h"
+#include "NSProviderTopic.h"
+#include "oic_malloc.h"
+#include "oic_string.h"
+#include "cautilinterface.h"
+#include "NSProviderSystem.h"
+#include "oic_time.h"
+
+bool initProvider = false;
+
+pthread_mutex_t nsInitMutex;
+
+void initializeMutex()
+{
+    static pthread_mutex_t initMutex = PTHREAD_MUTEX_INITIALIZER;
+    nsInitMutex = initMutex;
+}
+
+NSResult NSStartProvider(NSProviderConfig config)
+{
+    NS_LOG(DEBUG, "NSStartProvider - IN");
+
+    initializeMutex();
+
+    pthread_mutex_lock(&nsInitMutex);
+
+    if (!initProvider)
+    {
+        NS_LOG(DEBUG, "Init Provider");
+        initProvider = true;
+        NSInitProviderInfo(config.userInfo);
+        NSSetSubscriptionAccessPolicy(config.policy);
+        NSRegisterSubscribeRequestCb(config.subRequestCallback);
+        NSRegisterSyncCb(config.syncInfoCallback);
+        CARegisterNetworkMonitorHandler((CAAdapterStateChangedCB)NSProviderAdapterStateListener,
+                (CAConnectionStateChangedCB)NSProviderConnectionStateListener);
+
+        NSSetList();
+        NSInitScheduler();
+        NSStartScheduler();
+
+        NSPushQueue(DISCOVERY_SCHEDULER, TASK_START_PRESENCE, NULL);
+        NSPushQueue(DISCOVERY_SCHEDULER, TASK_REGISTER_RESOURCE, NULL);
+    }
+    else
+    {
+        NS_LOG(DEBUG, "Already started Notification Provider");
+    }
+    pthread_mutex_unlock(&nsInitMutex);
+
+    NS_LOG(DEBUG, "NSStartProvider - OUT");
+    return NS_OK;
+}
+
+void NSSetList()
+{
+    NS_LOG(DEBUG, "NSSetList - IN");
+
+    pthread_mutexattr_init(&NSCacheMutexAttr);
+    pthread_mutexattr_settype(&NSCacheMutexAttr, PTHREAD_MUTEX_RECURSIVE);
+    pthread_mutex_init(&NSCacheMutex, &NSCacheMutexAttr);
+
+    NSInitSubscriptionList();
+    NSInitTopicList();
+    NS_LOG(DEBUG, "NSSetList - OUT");
+}
+
+void NSDestroyList()
+{
+    NSStorageDestroy(consumerSubList);
+    NSStorageDestroy(consumerTopicList);
+    NSStorageDestroy(registeredTopicList);
+
+    pthread_mutex_destroy(&NSCacheMutex);
+    pthread_mutexattr_destroy(&NSCacheMutexAttr);
+}
+
+NSResult NSStopProvider()
+{
+    NS_LOG(DEBUG, "NSStopProvider - IN");
+    pthread_mutex_lock(&nsInitMutex);
+
+    if(initProvider)
+    {
+        NSPushQueue(DISCOVERY_SCHEDULER, TASK_STOP_PRESENCE, NULL);
+        NSDeinitProviderInfo();
+        NSUnRegisterResource();
+        NSRegisterSubscribeRequestCb((NSSubscribeRequestCallback)NULL);
+        NSRegisterSyncCb((NSProviderSyncInfoCallback)NULL);
+        NSStopScheduler();
+        NSDestroyList();
+
+        initProvider = false;
+    }
+
+    pthread_mutex_unlock(&nsInitMutex);
+    NS_LOG(DEBUG, "NSStopProvider - OUT");
+    return NS_OK;
+}
+
+NSResult NSProviderEnableRemoteService(char *serverAddress)
+{
+#if(defined WITH_CLOUD && defined RD_CLIENT)
+    NS_LOG(DEBUG, "NSProviderEnableRemoteService - IN");
+    pthread_mutex_lock(&nsInitMutex);
+
+    if(!initProvider || !serverAddress)
+    {
+        NS_LOG(DEBUG, "Provider service has not been started yet");
+        pthread_mutex_unlock(&nsInitMutex);
+        return NS_FAIL;
+    }
+    NS_LOG_V(DEBUG, "Remote server address: %s", serverAddress);
+    NS_LOG(DEBUG, "Request to publish resource");
+    NSPushQueue(DISCOVERY_SCHEDULER, TASK_PUBLISH_RESOURCE, serverAddress);
+
+    pthread_mutex_unlock(&nsInitMutex);
+    NS_LOG(DEBUG, "NSProviderEnableRemoteService - OUT");
+    return NS_OK;
+#endif
+    NS_LOG_V(DEBUG, "Not logged in remote server: %s", serverAddress);
+    return NS_FAIL;
+}
+
+NSResult NSProviderDisableRemoteService(char *serverAddress)
+{
+#if(defined WITH_CLOUD && defined RD_CLIENT)
+    NS_LOG(DEBUG, "NSProviderDisableRemoteService - IN");
+    pthread_mutex_lock(&nsInitMutex);
+
+    if(!initProvider || !serverAddress)
+    {
+        NS_LOG(DEBUG, "Provider service has not been started yet");
+        return NS_FAIL;
+    }
+    NS_LOG_V(DEBUG, "Remote server address: %s", serverAddress);
+
+    NS_LOG(DEBUG, "Delete remote server info");
+    NSDeleteRemoteServerAddress(serverAddress);
+
+    pthread_mutex_unlock(&nsInitMutex);
+    NS_LOG(DEBUG, "NSProviderDisableRemoteService - OUT");
+    return NS_OK;
+#endif
+    NS_LOG_V(DEBUG, "Not logged in remote server : %s", serverAddress);
+    return NS_FAIL;
+}
+
+NSResult NSSendMessage(NSMessage * msg)
+{
+    NS_LOG(DEBUG, "NSSendNotification - IN");
+
+    pthread_mutex_lock(&nsInitMutex);
+
+    if(msg == NULL)
+    {
+        NS_LOG(ERROR, "Msg is NULL");
+        pthread_mutex_unlock(&nsInitMutex);
+        return NS_FAIL;
+    }
+
+    NSMessage * newMsg = NSDuplicateMessage(msg);
+    NSPushQueue(NOTIFICATION_SCHEDULER, TASK_SEND_NOTIFICATION, newMsg);
+
+    pthread_mutex_unlock(&nsInitMutex);
+
+    NS_LOG(DEBUG, "NSSendNotification - OUT");
+    return NS_OK;
+}
+
+NSResult NSProviderSendSyncInfo(uint64_t messageId, NSSyncType type)
+{
+    NS_LOG(DEBUG, "NSProviderReadCheck - IN");
+    pthread_mutex_lock(&nsInitMutex);
+
+    NSSyncInfo * syncInfo = (NSSyncInfo *)OICMalloc(sizeof(NSSyncInfo));
+    OICStrcpy(syncInfo->providerId, UUID_STRING_SIZE, NSGetProviderInfo()->providerId);
+    syncInfo->messageId = messageId;
+    syncInfo->state = type;
+    NSPushQueue(NOTIFICATION_SCHEDULER, TASK_SEND_READ, syncInfo);
+
+    pthread_mutex_unlock(&nsInitMutex);
+    NS_LOG(DEBUG, "NSProviderReadCheck - OUT");
+    return NS_OK;
+}
+
+NSResult NSAcceptSubscription(const char * consumerId, bool accepted)
+{
+    NS_LOG(DEBUG, "NSAccept - IN");
+    pthread_mutex_lock(&nsInitMutex);
+
+    if(!consumerId)
+    {
+        NS_LOG(ERROR, "consumerId is NULL");
+        pthread_mutex_unlock(&nsInitMutex);
+        return NS_FAIL;
+    }
+
+    char * newConsumerId = OICStrdup(consumerId);
+    if(accepted)
+    {
+        NS_LOG(DEBUG, "accepted is true - ALLOW");
+        NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SEND_ALLOW, newConsumerId);
+    }
+    else
+    {
+        NS_LOG(DEBUG, "accepted is false - DENY");
+        NSPushQueue(SUBSCRIPTION_SCHEDULER, TASK_SEND_DENY, newConsumerId);
+    }
+
+    pthread_mutex_unlock(&nsInitMutex);
+    NS_LOG(DEBUG, "NSAccept - OUT");
+    return NS_OK;
+}
+
+NSMessage * NSCreateMessage()
+{
+    NS_LOG(DEBUG, "NSCreateMessage - IN");
+    pthread_mutex_lock(&nsInitMutex);
+
+    NSMessage * msg = NSInitializeMessage();
+
+    OICStrcpy(msg->providerId, UUID_STRING_SIZE, NSGetProviderInfo()->providerId);
+
+    pthread_mutex_unlock(&nsInitMutex);
+    NS_LOG(DEBUG, "NSCreateMessage - OUT");
+    return msg;
+}
+
+NSTopicLL * NSProviderGetConsumerTopics(const char * consumerId)
+{
+    NS_LOG(DEBUG, "NSProviderGetConsumerTopics - IN");
+    pthread_mutex_lock(&nsInitMutex);
+
+    if(!consumerId)
+    {
+        NS_LOG(DEBUG, "consumer id should be set");
+        pthread_mutex_unlock(&nsInitMutex);
+        return NULL;
+    }
+
+    NSTopicLL * topics = NSProviderGetConsumerTopicsCacheData(registeredTopicList,
+            consumerTopicList, consumerId);
+
+    pthread_mutex_unlock(&nsInitMutex);
+    return topics;
+}
+
+NSTopicLL * NSProviderGetTopics()
+{
+    NS_LOG(DEBUG, "NSProviderGetTopics - IN");
+    pthread_mutex_lock(&nsInitMutex);
+
+    NSTopicLL * topics = NSProviderGetTopicsCacheData(registeredTopicList);
+
+    pthread_mutex_unlock(&nsInitMutex);
+    NS_LOG(DEBUG, "NSProviderGetTopics - OUT");
+
+    return topics;
+}
+
+NSResult NSProviderRegisterTopic(const char * topicName)
+{
+    NS_LOG(DEBUG, "NSProviderAddTopics - IN");
+    pthread_mutex_lock(&nsInitMutex);
+
+    if(!topicName)
+    {
+        pthread_mutex_unlock(&nsInitMutex);
+        NS_LOG(DEBUG, "topic Name should be set");
+        return NS_FAIL;
+    }
+
+    NSPushQueue(TOPIC_SCHEDULER, TASK_ADD_TOPIC, OICStrdup(topicName));
+
+    pthread_mutex_unlock(&nsInitMutex);
+    NS_LOG(DEBUG, "NSProviderAddTopics - OUT");
+    return NS_OK;
+}
+
+NSResult NSProviderUnregisterTopic(const char * topicName)
+{
+    NS_LOG(DEBUG, "NSProviderDeleteTopics - IN");
+    pthread_mutex_lock(&nsInitMutex);
+
+    if(!topicName)
+    {
+        pthread_mutex_unlock(&nsInitMutex);
+        NS_LOG(DEBUG, "topic Name should be set");
+        return NS_FAIL;
+    }
+
+    NSPushQueue(TOPIC_SCHEDULER, TASK_DELETE_TOPIC, (void *) topicName);
+
+    pthread_mutex_unlock(&nsInitMutex);
+    NS_LOG(DEBUG, "NSProviderDeleteTopics - OUT");
+    return NS_OK;
+}
+
+NSResult NSProviderSetConsumerTopic(const char * consumerId, const char * topicName)
+{
+    NS_LOG(DEBUG, "NSProviderSelectTopics - IN");
+    pthread_mutex_lock(&nsInitMutex);
+
+    if(!consumerId || !topicName || !NSGetPolicy())
+    {
+        NS_LOG(DEBUG, "consumer id should be set for topic subscription or "
+                "Configuration must set to true.");
+        pthread_mutex_unlock(&nsInitMutex);
+        return NS_FAIL;
+    }
+
+    NSCacheTopicSubData * topicSubData =
+            (NSCacheTopicSubData *) OICMalloc(sizeof(NSCacheTopicSubData));
+
+    OICStrcpy(topicSubData->id, NS_UUID_STRING_SIZE, consumerId);
+    topicSubData->topicName = OICStrdup(topicName);
+
+    NSPushQueue(TOPIC_SCHEDULER, TASK_SUBSCRIBE_TOPIC, (void *)topicSubData);
+
+    pthread_mutex_unlock(&nsInitMutex);
+    NS_LOG(DEBUG, "NSProviderSelectTopics - OUT");
+    return NS_OK;
+}
+
+NSResult NSProviderUnsetConsumerTopic(const char * consumerId, const char * topicName)
+{
+    NS_LOG(DEBUG, "NSProviderUnselectTopics - IN");
+    pthread_mutex_lock(&nsInitMutex);
+
+    if(!consumerId || !topicName || !NSGetPolicy())
+    {
+        NS_LOG(DEBUG, "consumer id should be set for topic subscription or "
+                "Configuration must set to true.");
+        pthread_mutex_unlock(&nsInitMutex);
+        return NS_FAIL;
+    }
+
+    NSCacheTopicSubData * topicSubData =
+            (NSCacheTopicSubData *) OICMalloc(sizeof(NSCacheTopicSubData));
+
+    OICStrcpy(topicSubData->id, NS_UUID_STRING_SIZE, consumerId);
+    topicSubData->topicName = OICStrdup(topicName);
+
+    NSPushQueue(TOPIC_SCHEDULER, TASK_UNSUBSCRIBE_TOPIC, (void *)topicSubData);
+
+    pthread_mutex_unlock(&nsInitMutex);
+    NS_LOG(DEBUG, "NSProviderUnselectTopics - OUT");
+    return NS_OK;
+}
+