Merge notification service from master branch
authorcc <ch79.cho@samsung.com>
Fri, 30 Sep 2016 05:37:08 +0000 (14:37 +0900)
committerUze Choi <uzchoi@samsung.com>
Fri, 30 Sep 2016 07:34:52 +0000 (07:34 +0000)
Change-Id: I60d53c447c706b70acd4e19f0b5fb3c3bdcf137a
Signed-off-by: cc <ch79.cho@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/12613
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
77 files changed:
service/notification/SConscript
service/notification/android/notification-service/src/main/java/org/iotivity/service/ns/common/Message.java
service/notification/android/notification-service/src/main/java/org/iotivity/service/ns/provider/ProviderService.java
service/notification/android/notification-service/src/main/jni/Android.mk
service/notification/android/notification-service/src/main/jni/common/JniNotificationCommon.cpp
service/notification/android/notification-service/src/main/jni/common/JniNotificationCommon.h
service/notification/android/notification-service/src/main/jni/consumer/JniNotificationConsumer.cpp
service/notification/android/notification-service/src/main/jni/provider/JniNotificationProvider.cpp [changed mode: 0644->0755]
service/notification/android/notification-service/src/main/jni/provider/JniNotificationProvider.h
service/notification/cpp-wrapper/common/NSMediaContents.cpp
service/notification/cpp-wrapper/common/NSMediaContents.h
service/notification/cpp-wrapper/common/NSMessage.cpp
service/notification/cpp-wrapper/common/NSMessage.h
service/notification/cpp-wrapper/common/NSSyncInfo.h
service/notification/cpp-wrapper/common/NSTopic.h
service/notification/cpp-wrapper/common/NSTopicsList.cpp
service/notification/cpp-wrapper/common/NSUtils.h
service/notification/cpp-wrapper/consumer/SConscript
service/notification/cpp-wrapper/consumer/inc/NSProvider.h
service/notification/cpp-wrapper/consumer/src/NSProvider.cpp
service/notification/cpp-wrapper/examples/linux/SConscript
service/notification/cpp-wrapper/examples/linux/notificationserviceconsumer.cpp
service/notification/cpp-wrapper/examples/linux/notificationserviceprovider.cpp
service/notification/cpp-wrapper/provider/SConscript
service/notification/cpp-wrapper/provider/inc/NSProviderService.h
service/notification/cpp-wrapper/provider/src/NSProviderService.cpp
service/notification/cpp-wrapper/unittest/NSConsumerServiceSimulator.h
service/notification/cpp-wrapper/unittest/NSProviderServiceSimulator.h
service/notification/examples/android/NotiConsumerExample/app/src/main/java/com/sec/noticonsumerexample/ConsumerProxy.java [deleted file]
service/notification/examples/android/NotiConsumerExample/app/src/main/java/com/sec/noticonsumerexample/MainActivity.java
service/notification/examples/android/NotiConsumerExample/app/src/main/res/layout/activity_main.xml
service/notification/examples/android/NotiConsumerExample/app/src/test/java/com/sec/noticonsumerexample/ExampleUnitTest.java [deleted file]
service/notification/examples/android/NotiConsumerExample/iotivity-armeabi-notification-service-release/build.gradle [deleted file]
service/notification/examples/android/NotiConsumerExample/iotivity-base-armeabi-release/build.gradle [deleted file]
service/notification/examples/android/NotiConsumerExample/settings.gradle
service/notification/examples/android/NotiProviderExample/app/build.gradle
service/notification/examples/android/NotiProviderExample/app/src/main/java/com/sec/notiproviderexample/MainActivity.java
service/notification/examples/android/NotiProviderExample/app/src/main/java/com/sec/notiproviderexample/NotiListener.java
service/notification/examples/android/NotiProviderExample/app/src/main/java/com/sec/notiproviderexample/ProviderProxy.java [deleted file]
service/notification/examples/android/NotiProviderExample/app/src/main/res/layout/activity_main.xml
service/notification/examples/android/NotiProviderExample/app/src/main/res/values/strings.xml
service/notification/examples/android/NotiProviderExample/app/src/test/java/com/sec/notiproviderexample/ExampleUnitTest.java [deleted file]
service/notification/examples/android/NotiProviderExample/iotivity-armeabi-notification-service-debug/build.gradle [deleted file]
service/notification/examples/android/NotiProviderExample/iotivity-base-armeabi-debug/build.gradle [deleted file]
service/notification/examples/android/NotiProviderExample/settings.gradle
service/notification/examples/linux/notificationprovider.c
service/notification/src/common/NSConstants.h
service/notification/src/common/NSStorageAdapter.h [deleted file]
service/notification/src/common/NSUtil.c
service/notification/src/consumer/NSConsumerCommon.c
service/notification/src/consumer/NSConsumerCommon.h
service/notification/src/consumer/NSConsumerCommunication.c
service/notification/src/consumer/NSConsumerDiscovery.c
service/notification/src/consumer/NSConsumerInternalTaskController.c
service/notification/src/consumer/NSConsumerInternalTaskController.h
service/notification/src/consumer/NSConsumerMemoryCache.c
service/notification/src/consumer/NSConsumerMemoryCache.h
service/notification/src/consumer/NSConsumerNetworkEventListener.c
service/notification/src/consumer/NSConsumerQueue.c
service/notification/src/consumer/NSConsumerQueue.h
service/notification/src/consumer/NSConsumerScheduler.c
service/notification/src/provider/NSProviderCallbackResponse.c
service/notification/src/provider/NSProviderInterface.c
service/notification/src/provider/NSProviderListener.h
service/notification/src/provider/NSProviderMemoryCache.c
service/notification/src/provider/NSProviderMemoryCache.h
service/notification/src/provider/NSProviderResource.c
service/notification/src/provider/NSProviderScheduler.c
service/notification/src/provider/NSProviderSubscription.c
service/notification/src/provider/NSProviderSubscription.h
service/notification/src/provider/NSProviderSystem.h
service/notification/src/provider/NSProviderTopic.c
service/notification/src/provider/NSProviderTopic.h
service/notification/unittest/NSConsumerSimulator.h
service/notification/unittest/NSProviderSimulator.h
service/notification/unittest/NSProviderTest.cpp
service/notification/unittest/SConscript

index 5eb4b77..d93276d 100755 (executable)
@@ -122,9 +122,5 @@ if target_os == 'linux':
 # Go to build sample apps
 SConscript('examples/SConscript')
 
-# Go to build jni
-if target_os == 'android':
-    SConscript('android/SConscript')
-
 # Go to build c++ wrapper
 SConscript('cpp-wrapper/SConscript')
index 6f6f505..4d2f2cd 100755 (executable)
@@ -21,6 +21,7 @@
 package org.iotivity.service.ns.common;
 
 import android.util.Log;
+import org.iotivity.base.OcRepresentation;
 
 /**
   * @class   Message
@@ -58,7 +59,8 @@ public class Message
     public String mTitle                       = null;
     public String mContentText                 = null;
     public MediaContents mMediaContents        = null;
-    public String mTopic                  = null;
+    public String mTopic                       = null;
+    public OcRepresentation mExtraInfo         = null;
 
     private long mNativeHandle                 = 0;
 
@@ -120,6 +122,12 @@ public class Message
     {
         return mTopic;
     }
+
+    public OcRepresentation getExtraInfo()
+    {
+        return mExtraInfo;
+    }
+
     public void setSourceName (String sourceName)
     {
         mSourceName = sourceName;
@@ -159,4 +167,9 @@ public class Message
     {
         mTopic = topic;
     }
+
+    public void setExtraInfo(OCRepresentation extraInfo)
+    {
+        mExtraInfo = extraInfo;
+    }
 }
index 428b022..7f69d2f 100644 (file)
@@ -55,9 +55,11 @@ public class ProviderService
 
     public int start(OnConsumerSubscribedListener  subscribedListener,
                      OnMessageSynchronizedListener  messageSynchronized,
-                     boolean subControllability, String userInfo) throws NSException
+                     boolean subControllability, String userInfo, 
+                     boolean resourceSecurity) throws NSException
     {
-        return nativeStart(subscribedListener, messageSynchronized,subControllability,userInfo);
+        return nativeStart(subscribedListener, messageSynchronized,
+                            subControllability, userInfo, resourceSecurity);
     }
 
     public int stop() throws NSException
@@ -115,9 +117,10 @@ public class ProviderService
         public void onMessageSynchronized(SyncInfo syncInfo);
     }
 
-    public native int  nativeStart(OnConsumerSubscribedListener    subscribedListener,
-                                                 OnMessageSynchronizedListener   messageSynchronized,
-                                                 boolean subControllability, String userInfo) throws NSException;
+    public native int  nativeStart(OnConsumerSubscribedListener subscribedListener,
+                                                 OnMessageSynchronizedListener messageSynchronized,
+                                                 boolean subControllability, String userInfo, 
+                                                 boolean resourceSecurity) throws NSException;
     public native int  nativeStop() throws NSException;
     public native int  nativeSendMessage(Message message) throws NSException;
     public native void  nativeSendSyncInfo( long messageId , int type) throws NSException;
index 13a1dfb..7dbcb90 100755 (executable)
@@ -36,6 +36,8 @@ LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/resource/include
 LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/resource/c_common
 LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/resource/c_common/oic_string/include
 LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/resource/oc_logger/include
+LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/extlibs/boost/boost_1_58_0
+LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/android/android_api/base/jni
 LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/service/notification/include
 LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/service/notification/src/common
 LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/service/notification/src/consumer
@@ -84,6 +86,8 @@ LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/resource/include
 LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/resource/c_common
 LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/resource/c_common/oic_string/include
 LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/resource/oc_logger/include
+LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/extlibs/boost/boost_1_58_0
+LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/android/android_api/base/jni
 LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/service/notification/include
 LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/service/notification/src/common
 LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/service/notification/src/provider
@@ -96,4 +100,4 @@ LOCAL_C_INCLUDES += $(OIC_SRC_DIR)/extlibs/
 LOCAL_SRC_FILES := provider/JniNotificationProvider.cpp
 LOCAL_SRC_FILES += common/JniNotificationCommon.cpp
 
-include $(BUILD_SHARED_LIBRARY)
\ No newline at end of file
+include $(BUILD_SHARED_LIBRARY)
index 2852195..595d355 100755 (executable)
 extern "C" {\r
 #endif\r
 \r
-#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)\r
-#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)\r
-#define  LOGW(...)  __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__)\r
-#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)\r
-\r
 #define JNI_EXCEPTION 1000\r
 #define JNI_NO_NATIVE_POINTER 1001\r
 #define JNI_INVALID_VALUE 1002\r
index 2b85992..78352ef 100755 (executable)
@@ -20,8 +20,9 @@
 \r
 #include "JniNotificationConsumer.h"\r
 #include "NSConsumerService.h"\r
+#include "JniOcRepresentation.h"\r
 \r
-static JavaVM *g_jvm = NULL;\r
+static JavaVM *g_jvm_consumer = NULL;\r
 \r
 static jobject g_obj_postListener = NULL;\r
 static jobject g_obj_syncListener = NULL;\r
@@ -38,18 +39,20 @@ jclass g_cls_Message_Type;
 jclass g_cls_ProviderState;\r
 jclass g_cls_Topic;\r
 jclass g_cls_TopicsList;\r
+jclass g_cls_OcRepresentation;\r
+jmethodID g_mid_OcRepresentation_N_ctor_bool = NULL;\r
 \r
 static JNIEnv *GetJNIEnv(jint *ret)\r
 {\r
     JNIEnv *env = NULL;\r
 \r
-    *ret = g_jvm->GetEnv((void **) &env, JNI_CURRENT_VERSION);\r
+    *ret = g_jvm_consumer->GetEnv((void **) &env, JNI_CURRENT_VERSION);\r
     switch (*ret)\r
     {\r
         case JNI_OK:\r
             return env;\r
         case JNI_EDETACHED:\r
-            if (g_jvm->AttachCurrentThread(&env, NULL) != JNI_OK)\r
+            if (g_jvm_consumer->AttachCurrentThread(&env, NULL) != JNI_OK)\r
             {\r
                 LOGE ("Failed to get the environment");\r
                 return NULL;\r
@@ -607,7 +610,33 @@ jobject getJavaMessage(JNIEnv *env, OIC::Service::NSMessage *message)
         }\r
         env->SetObjectField(obj_message, fid_type, jType);\r
     }\r
+    \r
+    LOGD("Reading OCRepresentation Object from Native");\r
 \r
+    OC::OCRepresentation *ocRepresentation = new OC::OCRepresentation(message->getExtraInfo());\r
+    jlong handle = reinterpret_cast<jlong>(ocRepresentation);\r
+    jobject jRepresentation = env->NewObject(g_cls_OcRepresentation, g_mid_OcRepresentation_N_ctor_bool,\r
+                              handle, true);\r
+    if (!jRepresentation)\r
+    {\r
+        LOGE("Failed to create OcRepresentation");\r
+        delete ocRepresentation;\r
+    }\r
+    else\r
+    {\r
+        LOGD("Created OCRepresentation Object from Native");\r
+    }\r
+    jfieldID fid_extraInfo = env->GetFieldID(cls_message, "mExtraInfo",\r
+                             "Lorg/iotivity/base/OcRepresentation;");\r
+    if (!fid_extraInfo)\r
+    {\r
+        LOGE("Failed to get mExtraInfo for Message");\r
+        delete ocRepresentation;\r
+        return NULL;\r
+    }\r
+    LOGD ("setting extraInfo field");\r
+    env->SetObjectField(obj_message, fid_extraInfo, jRepresentation);\r
+    \r
     env->DeleteLocalRef(cls_message);\r
     LOGD ("ConsumerService_getJavaMessage - OUT");\r
     return obj_message;\r
@@ -625,7 +654,7 @@ void onDiscoverProvider(OIC::Service::NSProvider *provider)
     if (!jDiscoverListener)\r
     {\r
         LOGE ("Failed to Get jDiscoverListener");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
 \r
@@ -633,7 +662,7 @@ void onDiscoverProvider(OIC::Service::NSProvider *provider)
     if (!obj_provider)\r
     {\r
         LOGE ("Failed to Get Provider Object");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
 \r
@@ -641,7 +670,7 @@ void onDiscoverProvider(OIC::Service::NSProvider *provider)
     if (!cls)\r
     {\r
         LOGE ("Failed to Get ObjectClass for jDiscoverListener");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
     jmethodID mid = env->GetMethodID(\r
@@ -651,14 +680,14 @@ void onDiscoverProvider(OIC::Service::NSProvider *provider)
     if (!mid)\r
     {\r
         LOGE ("Failed to Get MethodID for onProviderDiscovered");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
 \r
     env->CallVoidMethod(jDiscoverListener, mid, obj_provider);\r
 \r
     env->DeleteLocalRef(jDiscoverListener);\r
-    if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+    if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
     LOGD ("ConsumerService_onDiscoverProvider - OUT");\r
     return ;\r
 }\r
@@ -675,14 +704,14 @@ void onProviderState( OIC::Service::NSProviderState state)
     if (!jAcceptListener)\r
     {\r
         LOGE ("Failed to Get jAcceptListener");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
     jobject obj_state = getJavaProviderState(env, state);\r
     if (!obj_state)\r
     {\r
         LOGE ("Failed to Get ProviderState Object");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
 \r
@@ -690,7 +719,7 @@ void onProviderState( OIC::Service::NSProviderState state)
     if (!cls)\r
     {\r
         LOGE ("Failed to Get ObjectClass for jAcceptListener");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
     jmethodID mid = env->GetMethodID(\r
@@ -700,13 +729,13 @@ void onProviderState( OIC::Service::NSProviderState state)
     if (!mid)\r
     {\r
         LOGE ("Failed to Get MethodID for onProviderState");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
     env->CallVoidMethod(jAcceptListener, mid, obj_state);\r
 \r
     env->DeleteLocalRef(jAcceptListener);\r
-    if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+    if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
     LOGD ("ConsumerService_onProviderState -OUT");\r
     return ;\r
 \r
@@ -724,7 +753,7 @@ void onMessagePosted(OIC::Service::NSMessage *message)
     if (!jPostListener)\r
     {\r
         LOGE ("Failed to Get jPostListener");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
 \r
@@ -732,14 +761,14 @@ void onMessagePosted(OIC::Service::NSMessage *message)
     if (!obj_message)\r
     {\r
         LOGE ("Failed to Get Message Object");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
     jclass cls = env->GetObjectClass(jPostListener);\r
     if (!cls)\r
     {\r
         LOGE ("Failed to Get ObjectClass for jPostListener");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
     jmethodID mid = env->GetMethodID(\r
@@ -749,14 +778,14 @@ void onMessagePosted(OIC::Service::NSMessage *message)
     if (!mid)\r
     {\r
         LOGE ("Failed to Get MethodID for onMessageReceived");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
 \r
     env->CallVoidMethod(jPostListener, mid, obj_message);\r
 \r
     env->DeleteLocalRef(jPostListener);\r
-    if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+    if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
     LOGD ("ConsumerService_onMessagePosted -OUT");\r
     return ;\r
 }\r
@@ -773,7 +802,7 @@ void onSyncInfoReceived(OIC::Service::NSSyncInfo *sync)
     if (!jSyncListener)\r
     {\r
         LOGE ("Failed to Get jSyncListener");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
 \r
@@ -787,14 +816,14 @@ void onSyncInfoReceived(OIC::Service::NSSyncInfo *sync)
     if (!syncType)\r
     {\r
         LOGE ("Failed to Get syncType for SyncInfo");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
     jclass cls_SyncInfo = (jclass) (env->NewLocalRef(g_cls_SyncInfo));\r
     if (!cls_SyncInfo)\r
     {\r
         LOGE ("Failed to Get ObjectClass for SyncInfo");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
     jmethodID mid_syncInfo = env->GetMethodID(\r
@@ -804,7 +833,7 @@ void onSyncInfoReceived(OIC::Service::NSSyncInfo *sync)
     if (!mid_syncInfo)\r
     {\r
         LOGE ("Failed to Get MethodID for SyncInfo");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
 \r
@@ -813,7 +842,7 @@ void onSyncInfoReceived(OIC::Service::NSSyncInfo *sync)
     if (!obj_syncInfo)\r
     {\r
         LOGE ("Failed to Get Object for SyncInfo");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
 \r
@@ -821,7 +850,7 @@ void onSyncInfoReceived(OIC::Service::NSSyncInfo *sync)
     if (!cls)\r
     {\r
         LOGE ("Failed to Get ObjectClass for jSyncListener");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
     jmethodID mid = env->GetMethodID(\r
@@ -831,7 +860,7 @@ void onSyncInfoReceived(OIC::Service::NSSyncInfo *sync)
     if (!mid)\r
     {\r
         LOGE ("Failed to Get MethodID for onSyncInfoReceived");\r
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+        if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
         return ;\r
     }\r
 \r
@@ -839,7 +868,7 @@ void onSyncInfoReceived(OIC::Service::NSSyncInfo *sync)
 \r
     env->DeleteLocalRef(jSyncListener);\r
     env->DeleteLocalRef(cls_SyncInfo);\r
-    if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+    if (JNI_EDETACHED == envRet) g_jvm_consumer->DetachCurrentThread();\r
     LOGD ("ConsumerService_onSyncInfoReceived - OUT");\r
     return ;\r
 }\r
@@ -1219,7 +1248,7 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeG
         LOGD ("calling getProviderState on ProviderID");\r
         state = provider->getProviderState();\r
     }\r
-    jobject obj_state = getJavaProviderState(env,state);\r
+    jobject obj_state = getJavaProviderState(env, state);\r
 \r
     LOGD("Provider_nativeGetProviderState - OUT");\r
     return obj_state;\r
@@ -1266,7 +1295,7 @@ JNIEXPORT jboolean JNICALL Java_org_iotivity_service_ns_consumer_Provider_native
 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)\r
 {\r
     LOGD("ConsumerService_JNI_OnLoad");\r
-    g_jvm = jvm;\r
+    g_jvm_consumer = jvm;\r
 \r
     JNIEnv *env;\r
     if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)\r
@@ -1387,7 +1416,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
     }\r
 \r
     jclass localProviderState = env->FindClass(\r
-                               "org/iotivity/service/ns/consumer/Provider$ProviderState");\r
+                                    "org/iotivity/service/ns/consumer/Provider$ProviderState");\r
     if (!localProviderState)\r
     {\r
         LOGE("Failed to get localProviderState  Type class");\r
@@ -1413,6 +1442,27 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
         LOGE("Failed to set Global TopicsList reference");\r
         return JNI_ERR;\r
     }\r
+    //OcRepresentation\r
+    jclass localOcRepresentation = env->FindClass("org/iotivity/base/OcRepresentation");\r
+    if (!localOcRepresentation)\r
+    {\r
+        LOGE("Failed to get local OcRepresentation class");\r
+        return JNI_ERR;\r
+    }\r
+    g_cls_OcRepresentation = (jclass) env->NewGlobalRef(localOcRepresentation);\r
+    if (!g_cls_OcRepresentation)\r
+    {\r
+        LOGE("Failed to set Global OcRepresentation reference");\r
+        return JNI_ERR;\r
+    }\r
+\r
+    g_mid_OcRepresentation_N_ctor_bool = env->GetMethodID(g_cls_OcRepresentation, "<init>", "(JZ)V");\r
+    if (!g_mid_OcRepresentation_N_ctor_bool)\r
+    {\r
+        LOGE("Failed to get Global OcRepresentation Constructor reference");\r
+        return JNI_ERR;\r
+    }\r
+\r
     env->DeleteLocalRef(localMessage);\r
     env->DeleteLocalRef(localProvider);\r
     env->DeleteLocalRef(localSyncInfo);\r
@@ -1423,6 +1473,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
     env->DeleteLocalRef(localProviderState);\r
     env->DeleteLocalRef(localTopic);\r
     env->DeleteLocalRef(localTopicsList);\r
+    env->DeleteLocalRef(localOcRepresentation);\r
 \r
     return NSExceptionInit(env);\r
 }\r
@@ -1448,4 +1499,5 @@ JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved)
     env->DeleteGlobalRef(g_cls_ProviderState);\r
     env->DeleteGlobalRef(g_cls_Topic);\r
     env->DeleteGlobalRef(g_cls_TopicsList);\r
+    env->DeleteGlobalRef(g_cls_OcRepresentation);\r
 }\r
old mode 100644 (file)
new mode 100755 (executable)
index f1a744a..bfe78db
@@ -20,8 +20,9 @@
 
 #include "JniNotificationProvider.h"
 #include "NSProviderService.h"
+#include "JniOcRepresentation.h"
 
-static JavaVM *g_jvm = NULL;
+static JavaVM *g_jvm_provider = NULL;
 
 static jobject g_obj_subscriptionListener = NULL;
 static jobject g_obj_syncListener = NULL;
@@ -35,18 +36,20 @@ jclass g_cls_MediaContents;
 jclass g_cls_Topic;
 jclass g_cls_TopicsList;
 jclass g_cls_TopicState;
+jclass g_cls_OcRepresentation;
+jmethodID g_mid_OcRepresentation_N_ctor_bool = NULL;
 
 static JNIEnv *GetJNIEnv(jint *ret)
 {
     JNIEnv *env = NULL;
 
-    *ret = g_jvm->GetEnv((void **) &env, JNI_CURRENT_VERSION);
+    *ret = g_jvm_provider->GetEnv((void **) &env, JNI_CURRENT_VERSION);
     switch (*ret)
     {
         case JNI_OK:
             return env;
         case JNI_EDETACHED:
-            if (g_jvm->AttachCurrentThread(&env, NULL) != JNI_OK)
+            if (g_jvm_provider->AttachCurrentThread(&env, NULL) != JNI_OK)
             {
                 LOGE ("Failed to get the environment");
                 return NULL;
@@ -241,6 +244,32 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg)
 
     LOGD("iconImage: %s\n", iconImage);
 
+    // Message ExtraInfo
+    jfieldID fid_extraInfo = env->GetFieldID( cls, "mExtraInfo",
+                             "Lorg/iotivity/base/OcRepresentation;");
+    if (fid_extraInfo == NULL)
+    {
+        LOGE("Error: jfieldID for mExtraInfo is null");
+        return nullptr;
+    }
+    jobject jExtraInfo = env->GetObjectField( jMsg, fid_extraInfo);
+    OC::OCRepresentation *representation = nullptr;
+    if (jExtraInfo == NULL)
+    {
+        LOGE("Error: jExtraInfo object of Message is null");
+    }
+    else
+    {
+        representation = GetHandle<OC::OCRepresentation>(env, jExtraInfo);
+        if (env->ExceptionCheck())
+        {
+            LOGE("Failed to get native handle from OcRepresentation");
+        }
+        if (!representation)
+        {
+            LOGE("Failed to get native object OcRepresentation");
+        }
+    }
     OIC::Service::NSMediaContents *media = new OIC::Service::NSMediaContents(std::string(iconImage));
     OIC::Service::NSMessage *nsMsg = OIC::Service::NSProviderService::getInstance()->createMessage();
 
@@ -252,6 +281,10 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg)
     nsMsg->setSourceName(std::string(messageSource));
     nsMsg->setMediaContents(media);
     nsMsg->setTopic(std::string(topic));
+    if (representation != nullptr)
+    {
+        nsMsg->setExtraInfo(*representation);
+    }
 
     env->DeleteLocalRef(cls_messageType);
     env->DeleteLocalRef(cls_MediaContents);
@@ -456,6 +489,31 @@ jobject getJavaMessage(JNIEnv *env, OIC::Service::NSMessage *message)
         env->SetObjectField(obj_message, fid_type, jType);
     }
 
+    LOGD("Reading OCRepresentation Object from Native");
+    OC::OCRepresentation *ocRepresentation = new OC::OCRepresentation(message->getExtraInfo());
+    jlong handle = reinterpret_cast<jlong>(ocRepresentation);
+    jobject jRepresentation = env->NewObject(g_cls_OcRepresentation, g_mid_OcRepresentation_N_ctor_bool,
+                              handle, true);
+    if (!jRepresentation)
+    {
+        LOGE("Failed to create OcRepresentation");
+        delete ocRepresentation;
+    }
+    else
+    {
+        LOGD("Created OCRepresentation Object from Native");
+    }
+    jfieldID fid_extraInfo = env->GetFieldID(cls_message, "mExtraInfo",
+                             "Lorg/iotivity/base/OcRepresentation;");
+    if (!fid_extraInfo)
+    {
+        LOGE("Failed to get mExtraInfo for Message");
+        delete ocRepresentation;
+        return NULL;
+    }
+    LOGD ("setting extraInfo field");
+    env->SetObjectField(obj_message, fid_extraInfo, jRepresentation);
+
     env->DeleteLocalRef(cls_message);
     LOGD ("JNIProviderService: getJavaMessage - OUT");
     return obj_message;
@@ -597,7 +655,7 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer)
     if (!jSubscriptionListener)
     {
         LOGE ("Failed to Get jSubscriptionListener");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
 
@@ -609,7 +667,7 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer)
     if (!cls_consumer)
     {
         LOGE ("Failed to Get ObjectClass for Consumer");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
 
@@ -620,7 +678,7 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer)
     if (!mid_consumer)
     {
         LOGE ("Failed to Get MethodID for Consumer<init>");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
     jobject obj_consumer = env->NewObject( cls_consumer, mid_consumer, jConsumerId);
@@ -629,7 +687,7 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer)
     if (!cls)
     {
         LOGE("Failed to Get ObjectClass of jSubscriptionListener");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return;
     }
     jmethodID mid = env->GetMethodID(
@@ -639,14 +697,14 @@ void onSubscribeListenerCb(OIC::Service::NSConsumer *consumer)
     if (!mid)
     {
         LOGE("Failed to Get MethodID of onConsumerSubscribed");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return;
     }
 
     env->CallVoidMethod( jSubscriptionListener, mid, obj_consumer);
     env->DeleteLocalRef(jSubscriptionListener);
     env->DeleteLocalRef(cls_consumer);
-    if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+    if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
     LOGD("JNIProviderService_onSubscribeListenerCb - OUT");
     return;
 }
@@ -663,7 +721,7 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync)
     if (!jSyncListener)
     {
         LOGE ("Failed to Get jSyncListener");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
 
@@ -676,14 +734,14 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync)
     if (!syncType)
     {
         LOGE ("Failed to Get syncType for SyncInfo");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
     jclass cls_SyncInfo = (jclass) (env->NewLocalRef(g_cls_SyncInfo));
     if (!cls_SyncInfo)
     {
         LOGE ("Failed to Get ObjectClass for SyncInfo");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
     jmethodID mid_syncInfo = env->GetMethodID(
@@ -693,7 +751,7 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync)
     if (!mid_syncInfo)
     {
         LOGE ("Failed to Get MethodID for SyncInfo");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
 
@@ -702,7 +760,7 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync)
     if (!obj_syncInfo)
     {
         LOGE ("Failed to Get Object for SyncInfo");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return ;
     }
 
@@ -710,7 +768,7 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync)
     if (!cls)
     {
         LOGE("Failed to Get ObjectClass");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return;
     }
     jmethodID mid = env->GetMethodID(
@@ -720,14 +778,14 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync)
     if (!mid)
     {
         LOGE("Failed to Get MethodID");
-        if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+        if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
         return;
     }
     env->CallVoidMethod( jSyncListener, mid, obj_syncInfo);
 
     env->DeleteLocalRef(jSyncListener);
     env->DeleteLocalRef(cls_SyncInfo);
-    if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+    if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
 
     LOGD("JNIProviderService: OnSyncInfoListenerCb - OUT");
     return;
@@ -735,7 +793,8 @@ void onSyncInfoListenerCb(OIC::Service::NSSyncInfo *sync)
 }
 
 JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeStart
-(JNIEnv *env, jobject jObj, jobject jSubscriptionListener, jobject jSyncListener, jboolean jPolicy, jstring jUserInfo)
+(JNIEnv *env, jobject jObj, jobject jSubscriptionListener, jobject jSyncListener,
+ jboolean jPolicy, jstring jUserInfo, jboolean jResourceSecurity)
 {
     LOGD("JNIProviderService: nativeStart - IN");
     if (!jSubscriptionListener || !jSyncListener)
@@ -769,6 +828,7 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
         std::string userInfo(info);
         cfg.userInfo = userInfo;
     }
+    cfg.resourceSecurity = (bool) jResourceSecurity;
 
     OIC::Service::NSResult result = OIC::Service::NSProviderService::getInstance()->start(cfg);
     if (result != OIC::Service::NSResult::OK)
@@ -842,15 +902,15 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_ProviderService_
 (JNIEnv *env, jobject jObj)
 {
     LOGD("JNIProviderService: nativeCreateMessage - IN");
-    OIC::Service::NSMessagemessage =
-                      OIC::Service::NSProviderService::getInstance()->createMessage();
-    if(message == nullptr)
+    OIC::Service::NSMessage *message =
+        OIC::Service::NSProviderService::getInstance()->createMessage();
+    if (message == nullptr)
     {
         ThrowNSException(NS_ERROR, "Couldn't get Native Message");
         return NULL;
     }
     jobject jMsg =  getJavaMessage(env, message);
-    if(!jMsg)
+    if (!jMsg)
     {
         ThrowNSException(NS_ERROR, "Couldn't create Java Message");
         return NULL;
@@ -859,8 +919,9 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_ProviderService_
     return jMsg;
 }
 
-JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeEnableRemoteService
-(JNIEnv *env,jobject jObj, jstring jstr)
+JNIEXPORT jint JNICALL
+Java_org_iotivity_service_ns_provider_ProviderService_nativeEnableRemoteService
+(JNIEnv *env, jobject jObj, jstring jstr)
 {
     LOGD("JNIProviderService: nativeEnableRemoteService - IN");
     if (!jstr)
@@ -883,8 +944,9 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
     return (jint) result;
 }
 
-JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeDisableRemoteService
-(JNIEnv *env,jobject jObj, jstring jstr)
+JNIEXPORT jint JNICALL
+Java_org_iotivity_service_ns_provider_ProviderService_nativeDisableRemoteService
+(JNIEnv *env, jobject jObj, jstring jstr)
 {
     LOGD("JNIProviderService: nativeDisableRemoteService - IN");
     if (!jstr)
@@ -950,7 +1012,8 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
     return (jint) result;
 }
 
-JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeGetRegisteredTopicList
+JNIEXPORT jobject JNICALL
+Java_org_iotivity_service_ns_provider_ProviderService_nativeGetRegisteredTopicList
 (JNIEnv *env, jobject jObj)
 {
     LOGD("JNIProviderService: nativeGetRegisteredTopicList - IN");
@@ -1088,7 +1151,7 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_Consumer_nativeG
 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
 {
     LOGD("ProviderService_JNI_OnLoad");
-    g_jvm = jvm;
+    g_jvm_provider = jvm;
 
     JNIEnv *env;
     if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
@@ -1223,6 +1286,27 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
         return JNI_ERR;
     }
 
+    //OcRepresentation
+    jclass localOcRepresentation = env->FindClass("org/iotivity/base/OcRepresentation");
+    if (!localOcRepresentation)
+    {
+        LOGE("Failed to get local OcRepresentation class");
+        return JNI_ERR;
+    }
+    g_cls_OcRepresentation = (jclass) env->NewGlobalRef(localOcRepresentation);
+    if (!g_cls_OcRepresentation)
+    {
+        LOGE("Failed to set Global OcRepresentation reference");
+        return JNI_ERR;
+    }
+
+    g_mid_OcRepresentation_N_ctor_bool = env->GetMethodID(g_cls_OcRepresentation, "<init>", "(JZ)V");
+    if (!g_mid_OcRepresentation_N_ctor_bool)
+    {
+        LOGE("Failed to get Global OcRepresentation Constructor reference");
+        return JNI_ERR;
+    }
+
     env->DeleteLocalRef(localMessage);
     env->DeleteLocalRef(localMessageType);
     env->DeleteLocalRef(localConsumer);
@@ -1232,6 +1316,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
     env->DeleteLocalRef(localTopic);
     env->DeleteLocalRef(localTopicsList);
     env->DeleteLocalRef(localTopicState);
+    env->DeleteLocalRef(localOcRepresentation);
 
     return NSExceptionInit(env);
 }
@@ -1256,4 +1341,5 @@ JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved)
     env->DeleteGlobalRef(g_cls_Topic);
     env->DeleteGlobalRef(g_cls_TopicsList);
     env->DeleteGlobalRef(g_cls_TopicState);
+    env->DeleteGlobalRef(g_cls_OcRepresentation);
 }
index 64b7b8b..d3a1a50 100644 (file)
@@ -30,10 +30,10 @@ extern "C" {
 /*
  * Class:     org_iotivity_service_ns_provider_ProviderService
  * Method:    nativeStart
- * Signature: (Lorg/iotivity/service/ns/provider/ProviderService/OnConsumerSubscribedListener;Lorg/iotivity/service/ns/provider/ProviderService/OnMessageSynchronizedListener;ZLjava/lang/String;)I
+ * Signature: (Lorg/iotivity/service/ns/provider/ProviderService/OnConsumerSubscribedListener;Lorg/iotivity/service/ns/provider/ProviderService/OnMessageSynchronizedListener;ZLjava/lang/String;Z)I
  */
 JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeStart
-(JNIEnv *, jobject, jobject, jobject, jboolean, jstring);
+(JNIEnv *, jobject, jobject, jobject, jboolean, jstring, jboolean);
 
 /*
  * Class:     org_iotivity_service_ns_provider_ProviderService
@@ -72,7 +72,8 @@ JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_ProviderService_
  * Method:    nativeEnableRemoteService
  * Signature: (Ljava/lang/String;)I
  */
-JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeEnableRemoteService
+JNIEXPORT jint JNICALL
+Java_org_iotivity_service_ns_provider_ProviderService_nativeEnableRemoteService
 (JNIEnv *, jobject, jstring);
 
 /*
@@ -80,7 +81,8 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
  * Method:    nativeDisableRemoteService
  * Signature: (Ljava/lang/String;)I
  */
-JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeDisableRemoteService
+JNIEXPORT jint JNICALL
+Java_org_iotivity_service_ns_provider_ProviderService_nativeDisableRemoteService
 (JNIEnv *, jobject, jstring);
 
 /*
@@ -104,7 +106,8 @@ JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nat
  * Method:    nativeGetRegisteredTopicList
  * Signature: ()Lorg/iotivity/service/ns/common/TopicsList;
  */
-JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_provider_ProviderService_nativeGetRegisteredTopicList
+JNIEXPORT jobject JNICALL
+Java_org_iotivity_service_ns_provider_ProviderService_nativeGetRegisteredTopicList
 (JNIEnv *, jobject);
 
 /*
index 1920766..a317b70 100755 (executable)
@@ -30,7 +30,9 @@ namespace OIC
             if (mediacontents != nullptr)\r
             {\r
                 if ((mediacontents->iconImage != nullptr) && strlen(mediacontents->iconImage))\r
+                {\r
                     m_iconImage.assign(mediacontents->iconImage, strlen(mediacontents->iconImage));\r
+                }\r
             }\r
         }\r
 \r
index 6e72484..9b02a15 100755 (executable)
@@ -60,7 +60,9 @@ namespace OIC
                      * @param iconImage - iconImage of the Notification service MediaContents.\r
                      */\r
                 NSMediaContents(const std::string &iconImage)\r
-                    : m_iconImage(iconImage) {}\r
+                    : m_iconImage(iconImage)\r
+                {\r
+                }\r
 \r
 \r
                 /**\r
index 2f58fc4..9e6c672 100755 (executable)
@@ -32,7 +32,7 @@ namespace OIC
             m_messageId = 0;\r
             m_type = NSMessage::NSMessageType::NS_MESSAGE_ALERT;\r
             m_ttl = 0;\r
-            m_mediaContents = new NSMediaContents();\r
+            m_mediaContents = nullptr;\r
 \r
             if (msg != nullptr)\r
             {\r
@@ -42,26 +42,59 @@ namespace OIC
                 m_type = (NSMessageType)msg->type;\r
 \r
                 if ((msg->dateTime != nullptr) && strlen(msg->dateTime))\r
+                {\r
                     m_time.assign(msg->dateTime, strlen(msg->dateTime));\r
+                }\r
 \r
                 m_ttl =  msg->ttl;\r
 \r
                 if ((msg->title != nullptr) && strlen(msg->title))\r
+                {\r
                     m_title.assign(msg->title, strlen(msg->title));\r
+                }\r
 \r
                 if ((msg->contentText != nullptr) && strlen(msg->contentText))\r
+                {\r
                     m_contentText.assign(msg->contentText, strlen(msg->contentText));\r
+                }\r
 \r
                 if ((msg->sourceName != nullptr) && strlen(msg->sourceName))\r
+                {\r
                     m_sourceName.assign(msg->sourceName, strlen(msg->sourceName));\r
+                }\r
 \r
                 if (msg->mediaContents != nullptr)\r
+                {\r
+                    m_mediaContents = new NSMediaContents();\r
                     if ((msg->mediaContents->iconImage != nullptr) && strlen(msg->mediaContents->iconImage))\r
+                    {\r
                         m_mediaContents->setIconImage(msg->mediaContents->iconImage);\r
+                    }\r
+                }\r
 \r
                 if ((msg->topic != nullptr) && strlen(msg->topic))\r
+                {\r
                     m_topic.assign(msg->topic, strlen(msg->topic));\r
-\r
+                }\r
+\r
+                if (msg->extraInfo != nullptr)\r
+                {\r
+                    OC::MessageContainer info;\r
+                    info.setPayload(msg->extraInfo);\r
+                    const std::vector<OC::OCRepresentation> &reps = info.representations();\r
+                    if (reps.size() > 0)\r
+                    {\r
+                        std::vector<OC::OCRepresentation>::const_iterator itr = reps.begin();\r
+                        std::vector<OC::OCRepresentation>::const_iterator back = reps.end();\r
+                        m_extraInfo = *itr;\r
+                        ++itr;\r
+\r
+                        for (; itr != back; ++itr)\r
+                        {\r
+                            m_extraInfo.addChild(*itr);\r
+                        }\r
+                    }\r
+                }\r
             }\r
         }\r
 \r
@@ -78,10 +111,15 @@ namespace OIC
             m_sourceName = msg.getSourceName();\r
 \r
             if (msg.getMediaContents() != nullptr)\r
+            {\r
                 m_mediaContents = new NSMediaContents(msg.getMediaContents()->getIconImage());\r
+            }\r
             else\r
+            {\r
                 m_mediaContents = new NSMediaContents();\r
+            }\r
             m_topic = msg.getTopic();\r
+            m_extraInfo = OC::OCRepresentation(msg.getExtraInfo());\r
         }\r
 \r
         NSMessage &NSMessage::operator=(const NSMessage &msg)\r
@@ -97,17 +135,24 @@ namespace OIC
             this->m_sourceName = msg.getSourceName();\r
 \r
             if (msg.getMediaContents() != nullptr)\r
+            {\r
                 this->m_mediaContents = new NSMediaContents(msg.getMediaContents()->getIconImage());\r
+            }\r
             else\r
+            {\r
                 this->m_mediaContents = new NSMediaContents();\r
+            }\r
             this->m_topic = msg.getTopic();\r
+            this->m_extraInfo = OC::OCRepresentation(msg.getExtraInfo());\r
             return *this;\r
         }\r
 \r
         NSMessage::~NSMessage()\r
         {\r
             if (m_mediaContents != nullptr)\r
+            {\r
                 delete m_mediaContents;\r
+            }\r
         }\r
 \r
         uint64_t NSMessage::getMessageId() const\r
@@ -199,5 +244,15 @@ namespace OIC
         {\r
             m_topic = topic;\r
         }\r
+\r
+        OC::OCRepresentation NSMessage::getExtraInfo() const\r
+        {\r
+            return OC::OCRepresentation(m_extraInfo);\r
+        }\r
+\r
+        void NSMessage::setExtraInfo(const OC::OCRepresentation &extraInfo)\r
+        {\r
+            m_extraInfo = OC::OCRepresentation(extraInfo);\r
+        }\r
     }\r
 }\r
index f29c607..b24ad2f 100755 (executable)
@@ -29,6 +29,7 @@
 \r
 #include <string>\r
 #include "NSMediaContents.h"\r
+#include "OCRepresentation.h"\r
 \r
 namespace OIC\r
 {\r
@@ -54,7 +55,9 @@ namespace OIC
                         * Constructor of NSMessage.\r
                         */\r
                 NSMessage(): m_messageId(0), m_type(NSMessageType::NS_MESSAGE_ALERT), m_ttl(0),\r
-                    m_mediaContents(new NSMediaContents) { }\r
+                    m_mediaContents(new NSMediaContents), m_extraInfo(OC::OCRepresentation())\r
+                {\r
+                }\r
 \r
                 /**\r
                         * Constructor of NSMessage.\r
@@ -209,6 +212,20 @@ namespace OIC
                      */\r
                 void setTopic(const std::string &topic);\r
 \r
+                /**\r
+                     * This method is for getting extraInfo from the Notification service Message.\r
+                     *\r
+                     * @return extraInfo as OCRepresentation.\r
+                     */\r
+                OC::OCRepresentation getExtraInfo() const;\r
+\r
+                /**\r
+                     * This method is for setting extraInfo for the Notification service Message.\r
+                     *\r
+                     * @return extraInfo as OCRepresentation.\r
+                     */\r
+                void setExtraInfo(const OC::OCRepresentation &extraInfo);\r
+\r
             private:\r
                 uint64_t m_messageId;\r
                 std::string m_providerId;\r
@@ -221,6 +238,7 @@ namespace OIC
                 std::string m_sourceName;\r
                 NSMediaContents *m_mediaContents;\r
                 std::string m_topic;\r
+                OC::OCRepresentation m_extraInfo;\r
 \r
         };\r
     }\r
index dfcbf20..a8ce81a 100755 (executable)
@@ -52,7 +52,9 @@ namespace OIC
                 /**\r
                         * Constructor of NSSyncInfo.\r
                         */\r
-                NSSyncInfo(): m_messageId(0), m_state(NSSyncType::NS_SYNC_UNREAD) { };\r
+                NSSyncInfo(): m_messageId(0), m_state(NSSyncType::NS_SYNC_UNREAD)\r
+                {\r
+                }\r
 \r
                 /**\r
                         * Constructor of NSSyncInfo.\r
@@ -71,7 +73,9 @@ namespace OIC
                         */\r
                 NSSyncInfo(const uint64_t &messageId, const std::string &providerId,\r
                            const NSSyncType &state)\r
-                    : m_messageId(messageId), m_providerId(providerId), m_state(state) {}\r
+                    : m_messageId(messageId), m_providerId(providerId), m_state(state)\r
+                {\r
+                }\r
 \r
                 /**\r
                         * Destructor of NSSyncInfo.\r
index 36a3747..8099541 100755 (executable)
@@ -54,7 +54,9 @@ namespace OIC
                 /**
                      * Constructor of NSTopic.
                      */
-                NSTopic(): m_state(NSTopicState::UNSUBSCRIBED) { }
+                NSTopic(): m_state(NSTopicState::UNSUBSCRIBED)
+                {
+                }
 
                 /**
                      * Constructor of NSTopic.
@@ -63,7 +65,9 @@ namespace OIC
                      * @param state - as NSTopicState.
                      */
                 NSTopic(const std::string &topicName, const NSTopicState state)
-                    : m_topicName(topicName) , m_state(state) {}
+                    : m_topicName(topicName) , m_state(state)
+                {
+                }
 
 
                 /**
index 9dddcd8..915547b 100755 (executable)
@@ -73,7 +73,9 @@ namespace OIC
             for (auto it : getTopicsList())
             {
                 if (it->getTopicName().compare(topicName) == 0)
+                {
                     m_topicsList.remove(it);
+                }
             }
         }
 
index 2c1ea66..88d440e 100755 (executable)
@@ -53,7 +53,7 @@ namespace OIC
             TOPIC = 3,
             STOPPED = 12
         };
-        
+
         /**
              * NSProviderSubscribedState of notification service
              */
index e476623..ec46434 100755 (executable)
@@ -51,6 +51,7 @@ notification_env.AppendUnique(CPPPATH = ['../../src/common'])
 
 notification_env.PrependUnique(LIBS = [
        'oc_logger',
+       'oc',
        'notification_consumer'
        ])
 
@@ -77,8 +78,10 @@ if env.get('WITH_CLOUD') == True:
        notification_env.AppendUnique(CPPDEFINES = ['WITH_CLOUD'])
 
 ######################################################################
-# Source files and Targets
+# Source files and Targets for Consumer
 ######################################################################
+notification_jni_consumer_env = notification_env.Clone()
+
 Import('notificationCommonStaticObjs')
 Import('notificationCommonSharedObjs')
 
@@ -95,3 +98,24 @@ notification_consumer_src = [
 consumersdk = notification_env.StaticLibrary('notification_consumer_wrapper', notification_consumer_src)
 notification_env.InstallTarget(consumersdk, 'libnotification_consumer_wrapper')
 notification_env.UserInstallTargetLib(consumersdk, 'libnotification_consumer_wrapper')
+
+######################################################################
+# Source files and Targets for Consumer Jni
+######################################################################
+if target_os == 'android':
+       notification_jni_consumer_env.AppendUnique(CPPPATH = ['../../../../extlibs/boost/boost_1_58_0'])
+       notification_jni_consumer_env.AppendUnique(CPPPATH = ['../../../../android/android_api/base/jni'])
+       notification_jni_consumer_env.AppendUnique(CPPPATH = ['../../android/notification-service/src/main/jni/common'])
+       notification_jni_consumer_env.AppendUnique(CPPPATH = ['../../android/notification-service/src/main/jni/consumer'])
+
+       notification_jni_consumer_env.PrependUnique(LIBS = [
+               'notification_consumer_wrapper'
+               ])
+
+       notification_consumer_jni_src = [
+               env.Glob('../../android/notification-service/src/main/jni/consumer/*.cpp'),
+               env.Glob('../../android/notification-service/src/main/jni/common/*.cpp')]
+
+       consumerJni = notification_jni_consumer_env.SharedLibrary('notification_consumer_jni', notification_consumer_jni_src)
+       notification_jni_consumer_env.InstallTarget(consumerJni, 'libnotification_consumer_jni')
+       notification_jni_consumer_env.UserInstallTargetLib(consumerJni, 'libnotification_consumer_jni')
index 7ddc0c5..bdbd678 100755 (executable)
@@ -71,7 +71,9 @@ namespace OIC
                       */\r
                 NSProvider(): m_topicList(new NSTopicsList()), m_state(NSProviderState::DENY),\r
                     m_subscribedState(NSProviderSubscribedState::DENY),\r
-                    m_stateCb(NULL), m_messageCb(NULL), m_syncInfoCb(NULL) {}\r
+                    m_stateCb(NULL), m_messageCb(NULL), m_syncInfoCb(NULL)\r
+                {\r
+                }\r
 \r
                 /**\r
                       * Constructor of NSProvider.\r
@@ -81,7 +83,9 @@ namespace OIC
                 NSProvider(const std::string &providerId) : m_providerId(providerId),\r
                     m_topicList(new NSTopicsList()), m_state(NSProviderState::DENY),\r
                     m_subscribedState(NSProviderSubscribedState::DENY),\r
-                    m_stateCb(NULL), m_messageCb(NULL), m_syncInfoCb(NULL)  {}\r
+                    m_stateCb(NULL), m_messageCb(NULL), m_syncInfoCb(NULL)\r
+                {\r
+                }\r
 \r
                 /**\r
                       * Constructor of NSProvider.\r
@@ -92,7 +96,9 @@ namespace OIC
                 NSProvider(const std::string &providerId, NSTopicsList *topicList) : m_providerId(\r
                         providerId), m_topicList(topicList), m_state(NSProviderState::DENY),\r
                     m_subscribedState(NSProviderSubscribedState::DENY),\r
-                    m_stateCb(NULL), m_messageCb(NULL), m_syncInfoCb(NULL)  {}\r
+                    m_stateCb(NULL), m_messageCb(NULL), m_syncInfoCb(NULL)\r
+                {\r
+                }\r
 \r
                 /**\r
                       * Constructor of NSProvider.\r
index 648f9c6..a9e4261 100755 (executable)
@@ -93,7 +93,9 @@ namespace OIC
         NSProvider::~NSProvider()\r
         {\r
             if (m_topicList != nullptr)\r
+            {\r
                 delete m_topicList;\r
+            }\r
         }\r
 \r
         std::string NSProvider::getProviderId() const\r
@@ -111,12 +113,9 @@ namespace OIC
         {\r
             NS_LOG(DEBUG, "updateTopicList - IN");\r
             if (topicList == nullptr)\r
+            {\r
                 return NSResult::ERROR;\r
-//            for (auto it : topicList->getTopicsList())\r
-//            {\r
-//                NS_LOG_V(DEBUG, "Topic Name : %s", it->getTopicName().c_str());\r
-//                NS_LOG_V(DEBUG, "Topic State : %d", (int) it->getState());\r
-//            }\r
+            }\r
             NS_LOG(DEBUG, "Creating TopicLL from TopicList");\r
             NSTopicLL *topicLL = NULL;\r
             for (auto it : topicList->getTopicsList())\r
@@ -189,7 +188,9 @@ namespace OIC
             NS_LOG(DEBUG, "isSubscribed - IN");\r
             NS_LOG_V(DEBUG, "Subscribed state : %d", (int)getProviderSubscribedState());\r
             if (getProviderSubscribedState() == NSProviderSubscribedState::SUBSCRIBED)\r
+            {\r
                 return true;\r
+            }\r
             return false;\r
         }\r
 \r
@@ -230,7 +231,9 @@ namespace OIC
         void NSProvider::setTopicList(NSTopicsList *topicsList)\r
         {\r
             if (m_topicList != nullptr)\r
+            {\r
                 delete m_topicList;\r
+            }\r
             m_topicList = topicsList;\r
         }\r
 \r
index 9c8891a..bff7f1c 100755 (executable)
@@ -43,6 +43,7 @@ notification_sample_env.AppendUnique(CPPPATH = ['../../../src/common'])
 notification_sample_env.PrependUnique(LIBS = [
        'liboctbstack',
        'oc_logger',
+       'oc',
        'connectivity_abstraction',
        'libcoap'
        ])
index 98d8853..f567b4a 100755 (executable)
@@ -45,8 +45,10 @@ void onNotificationPostedCb(OIC::Service::NSMessage *notification)
 \r
     auto provider = NSConsumerService::getInstance()->getProvider(notification->getProviderId());\r
     if (provider != nullptr)\r
+    {\r
         provider->sendSyncInfo(notification->getMessageId(),\r
                                OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ);\r
+    }\r
 }\r
 \r
 void onNotificationSyncCb(OIC::Service::NSSyncInfo *sync)\r
@@ -73,11 +75,13 @@ void onProviderStateChangedCb(OIC::Service::NSProviderState state)
         {\r
             auto topicList = provider->getTopicList();\r
             if (topicList != nullptr)\r
+            {\r
                 for (auto it : topicList->getTopicsList())\r
                 {\r
                     std::cout << "Topic Name: " << it->getTopicName() << std::endl;\r
                     std::cout << "Topic state: " << (int) it->getState() << std::endl;\r
                 }\r
+            }\r
         }\r
     }\r
     else if (state == OIC::Service::NSProviderState::STOPPED)\r
@@ -97,7 +101,9 @@ void onDiscoverNotificationCb(OIC::Service::NSProvider *provider)
         provider->subscribe();\r
     }\r
     if (mainProvider.empty())\r
+    {\r
         mainProvider = provider->getProviderId();\r
+    }\r
 }\r
 \r
 void *OCProcessThread(void *ptr)\r
@@ -119,7 +125,7 @@ void *OCProcessThread(void *ptr)
 \r
 int main(void)\r
 {\r
-    pthread_t OCThread;\r
+    pthread_t OCThread = NULL;\r
 \r
     std::cout << "start Iotivity" << std::endl;\r
     if (OCInit1(OC_CLIENT, OC_DEFAULT_FLAGS, OC_DEFAULT_FLAGS) != OC_STACK_OK)\r
@@ -133,7 +139,7 @@ int main(void)
     std::cout << "Start notification consumer service" << std::endl;\r
     while (!isExit)\r
     {\r
-        int num;\r
+        int num = 0;\r
 \r
         std::cout << "1. Start Consumer" << std::endl;\r
         std::cout << "2. Stop Consumer" << std::endl;\r
@@ -164,11 +170,13 @@ int main(void)
                     {\r
                         auto topicList = provider->getTopicList();\r
                         if (topicList != nullptr)\r
+                        {\r
                             for (auto it : topicList->getTopicsList())\r
                             {\r
                                 std::cout << "Topic Name: " << it->getTopicName() << std::endl;\r
                                 std::cout << "Topic state: " << (int) it->getState() << std::endl;\r
                             }\r
+                        }\r
                     }\r
                 }\r
                 break;\r
index ffef86b..8b2cd56 100755 (executable)
@@ -66,7 +66,9 @@ void subscribeRequestCallback(OIC::Service::NSConsumer *consumer)
 \r
     std::cout << "Consumer Device ID: " << consumer->getConsumerId() << std::endl;\r
     if (mainConsumer.empty())\r
+    {\r
         mainConsumer = consumer->getConsumerId();\r
+    }\r
     consumer->acceptSubscription(true);\r
 }\r
 \r
@@ -79,8 +81,8 @@ void syncCallback(OIC::Service::NSSyncInfo *sync)
 \r
 int main()\r
 {\r
-    int num;\r
-    pthread_t processThread;\r
+    int num = 0;\r
+    pthread_t processThread = NULL;\r
 \r
     std::cout << "start Iotivity" << std::endl;\r
 \r
index 040dd21..c64765f 100755 (executable)
@@ -51,6 +51,7 @@ notification_env.AppendUnique(CPPPATH = ['../../src/common'])
 
 notification_env.PrependUnique(LIBS = [
        'oc_logger',
+       'oc',
        'notification_provider'
        ])
 notification_env.AppendUnique(CXXFLAGS = ['-std=c++0x','-frtti'])
@@ -76,8 +77,10 @@ if env.get('WITH_CLOUD') == True:
        notification_env.AppendUnique(CPPDEFINES = ['WITH_CLOUD'])
 
 ######################################################################
-# Source files and Targets
+# Source files and Targets for Provider
 ######################################################################
+notification_jni_provider_env = notification_env.Clone()
+
 notificationCommonStaticObjs = [
        notification_env.Object('../common/NSMediaContents.cpp'),
        notification_env.Object('../common/NSMessage.cpp'),
@@ -108,3 +111,24 @@ notification_env.UserInstallTargetLib(providersdk, 'libnotification_provider_wra
 
 Export('notificationCommonStaticObjs')
 Export('notificationCommonSharedObjs')
+
+######################################################################
+# Source files and Targets for Provider Jni
+######################################################################
+if target_os == 'android':
+       notification_jni_provider_env.AppendUnique(CPPPATH = ['../../../../extlibs/boost/boost_1_58_0'])
+       notification_jni_provider_env.AppendUnique(CPPPATH = ['../../../../android/android_api/base/jni'])
+       notification_jni_provider_env.AppendUnique(CPPPATH = ['../../android/notification-service/src/main/jni/common'])
+       notification_jni_provider_env.AppendUnique(CPPPATH = ['../../android/notification-service/src/main/jni/provider'])
+
+       notification_jni_provider_env.PrependUnique(LIBS = [
+               'notification_provider_wrapper'
+               ])
+
+       notification_provider_jni_src = [
+               env.Glob('../../android/notification-service/src/main/jni/provider/*.cpp'),
+               env.Glob('../../android/notification-service/src/main/jni/common/*.cpp')]
+
+       providerJni = notification_jni_provider_env.SharedLibrary('notification_provider_jni', notification_provider_jni_src)
+       notification_jni_provider_env.InstallTarget(providerJni, 'libnotification_provider_jni')
+       notification_jni_provider_env.UserInstallTargetLib(providerJni, 'libnotification_provider_jni')
index 033b7e3..1eb69bb 100755 (executable)
@@ -78,6 +78,8 @@ namespace OIC
                     bool subControllability;\r
                     /** userInfo - user defined information */\r
                     std::string userInfo;\r
+                    /* Set on/off with SECURED build option */\r
+                    bool resourceSecurity;\r
                 } ProviderConfig;\r
 \r
                 /**\r
index 8b1364b..5eed943 100755 (executable)
@@ -26,6 +26,7 @@
 #include "NSConsumer.h"\r
 #include "NSSyncInfo.h"\r
 #include "NSConstants.h"\r
+#include "OCRepresentation.h"\r
 #include "oic_string.h"\r
 #include "oic_malloc.h"\r
 \r
@@ -72,11 +73,16 @@ namespace OIC
             nsMsg->contentText = OICStrdup(msg->getContentText().c_str());\r
             nsMsg->topic = OICStrdup(msg->getTopic().c_str());\r
 \r
-            nsMsg->mediaContents = new ::NSMediaContents;\r
             if (msg->getMediaContents() != nullptr)\r
+            {\r
+                nsMsg->mediaContents = new ::NSMediaContents;\r
                 nsMsg->mediaContents->iconImage = OICStrdup(msg->getMediaContents()->getIconImage().c_str());\r
+            }\r
             else\r
-                nsMsg->mediaContents->iconImage = nullptr;\r
+            {\r
+                nsMsg->mediaContents = nullptr;\r
+            }\r
+            nsMsg->extraInfo = msg->getExtraInfo().getPayload();\r
             return nsMsg;\r
         }\r
 \r
@@ -105,6 +111,7 @@ namespace OIC
             nsConfig.syncInfoCallback = onMessageSynchronizedCallback;\r
             nsConfig.subControllability = config.subControllability;\r
             nsConfig.userInfo = OICStrdup(config.userInfo.c_str());\r
+            nsConfig.resourceSecurity = config.resourceSecurity;\r
 \r
             NSResult result = (NSResult) NSStartProvider(nsConfig);\r
             NS_LOG(DEBUG, "start - OUT");\r
index cf22831..cec3045 100644 (file)
@@ -50,7 +50,7 @@ public:
 
     void findProvider()
     {
-        OC::OCPlatform::findResource("", std::string("/oic/res?rt=oic.r.notification"),
+        OC::OCPlatform::findResource("", std::string("/oic/res?rt=oic.wk.notification"),
                 OCConnectivityType::CT_DEFAULT,
                 std::bind(&NSConsumerSimulator::findResultCallback, this, std::placeholders::_1),
                 OC::QualityOfService::LowQos);
@@ -65,9 +65,9 @@ public:
         }
 
         OC::OCRepresentation rep;
-        rep.setValue("PROVIDER_ID", providerID);
-        rep.setValue("MESSAGE_ID", id);
-        rep.setValue("STATE", type);
+        rep.setValue("providerId", providerID);
+        rep.setValue("messageId", id);
+        rep.setValue("state", type);
 
         m_syncResource->post(rep, OC::QueryParamsMap(), &onPost, OC::QualityOfService::LowQos);
     }
@@ -114,7 +114,7 @@ private:
         std::cout << __func__ << " " << rep.getHost() << " result : " << eCode << std::endl;
 
         OC::QueryParamsMap map;
-        map.insert(std::pair<std::string,std::string>(std::string("consumerid"), std::string("123456789012345678901234567890123456")));
+        map.insert(std::pair<std::string,std::string>(std::string("consumerId"), std::string("123456789012345678901234567890123456")));
 
         try
         {
@@ -124,7 +124,7 @@ private:
             std::cout << "resourc : getResourceInterfaces " << resource->getResourceInterfaces()[0] << std::endl;
             std::cout << "resourc : getResourceTypes " << resource->getResourceTypes()[0] << std::endl;
 
-            std::vector<std::string> rts{"oic.r.notification"};
+            std::vector<std::string> rts{"oic.wk.notification"};
 
             m_msgResource
                 = OC::OCPlatform::constructResourceObject(
@@ -161,21 +161,21 @@ private:
         std::cout << __func__ << " " << rep.getHost() << " result : " << eCode;
         std::cout << " uri : " << rep.getUri() << std::endl;
 
-        if (rep.getUri() == "/notification/message" && rep.hasAttribute("MESSAGE_ID")
-                && rep.getValue<int>("MESSAGE_ID") != 1)
+        if (rep.getUri() == "/notification/message" && rep.hasAttribute("messageId")
+                && rep.getValue<int>("messageId") != 1)
         {
-            std::cout << "ID : " << rep.getValue<int>("ID") << std::endl;
-            std::cout << "TITLE : " << rep.getValueToString("TITLE") << std::endl;
-            std::cout << "CONTENT : " << rep.getValueToString("CONTENT") << std::endl;
-            m_messageFunc(int(rep.getValue<int>("MESSAGE_ID")),
-                          std::string(rep.getValueToString("TITLE")),
-                          std::string(rep.getValueToString("CONTENT")),
-                          std::string(rep.getValueToString("SOURCE")));
+            std::cout << "ID : " << rep.getValue<int>("messageId") << std::endl;
+            std::cout << "TITLE : " << rep.getValueToString("title") << std::endl;
+            std::cout << "CONTENT : " << rep.getValueToString("contentText") << std::endl;
+            m_messageFunc(int(rep.getValue<int>("messageId")),
+                          std::string(rep.getValueToString("title")),
+                          std::string(rep.getValueToString("contentText")),
+                          std::string(rep.getValueToString("source")));
         }
         else if (rep.getUri() == "/notification/sync")
         {
             std::cout << "else if (rep.getUri() == sync) " << std::endl;
-            m_syncFunc(int(rep.getValue<int>("STATE")), int(rep.getValue<int>("ID")));
+            m_syncFunc(int(rep.getValue<int>("state")), int(rep.getValue<int>("messageId")));
         }
     }
 
@@ -191,4 +191,4 @@ private:
 };
 
 
-#endif //_NS_CONSUMER_SERVICE_SIMULATOR_H_
\ No newline at end of file
+#endif //_NS_CONSUMER_SERVICE_SIMULATOR_H_
index ebed3fa..d87303b 100644 (file)
@@ -98,10 +98,10 @@ private:
                     std::string msgUri = m_notificationUri + m_messageUri;
                     std::string syncUri = m_notificationUri + m_syncUri;
                     std::string providerId = "123456789012345678901234567890123456";
-                    rep.setValue("ACCEPTER", (bool) m_accepter);
-                    rep.setValue("MESSAGE_URI", msgUri);
-                    rep.setValue("SYNC_URI", syncUri);
-                    rep.setValue("PROVIDER_ID", providerId);
+                    rep.setValue("subControllability", (bool) m_accepter);
+                    rep.setValue("messageUri", msgUri);
+                    rep.setValue("syncUri", syncUri);
+                    rep.setValue("providerId", providerId);
                 }
                 else if (type == requestType::NS_SYNC)
                 {
@@ -125,8 +125,8 @@ private:
                 m_syncRep = requests->getResourceRepresentation();
 
                 std::cout << "Receive POST at Sync" << std::endl;
-                std::cout << "Sync Id : " << m_syncRep.getValueToString("ID") << std::endl;
-                std::cout << "Sync State : " << m_syncRep.getValueToString("STATE") << std::endl;
+                std::cout << "provider Id : " << m_syncRep.getValueToString("providerId") << std::endl;
+                std::cout << "Sync State : " << m_syncRep.getValueToString("state") << std::endl;
 
                 response->setResourceRepresentation(m_syncRep);
 
@@ -159,8 +159,8 @@ private:
         {
             OC::OCRepresentation rep;
             std::string providerId = "123456789012345678901234567890123456";
-            rep.setValue<int>("MESSAGE_ID", (int)1);
-            rep.setValue("PROVIDER_ID", providerId);
+            rep.setValue<int>("messageId", (int)1);
+            rep.setValue("providerId", providerId);
 
             auto response = std::make_shared<OC::OCResourceResponse>();
             response->setRequestHandle(requests->getRequestHandle());
@@ -232,27 +232,27 @@ public:
     void sendRead(const uint64_t & id)
     {
         std::string providerId = "123456789012345678901234567890123456";
-        m_syncRep.setValue<int>("MESSAGE_ID", id);
-        m_syncRep.setValue("STATE", (int)1);
-        m_syncRep.setValue("PROVIDER_ID", providerId);
+        m_syncRep.setValue<int>("messageId", id);
+        m_syncRep.setValue("state", (int)1);
+        m_syncRep.setValue("providerId", providerId);
         OC::OCPlatform::notifyAllObservers(m_syncHandle);
     }
     void sendDismiss(const uint64_t & id)
     {
         std::string providerId = "123456789012345678901234567890123456";
-        m_syncRep.setValue<int>("MESSAGE_ID", id);
-        m_syncRep.setValue("STATE", (int)2);
-        m_syncRep.setValue("PROVIDER_ID", providerId);
+        m_syncRep.setValue<int>("messageId", id);
+        m_syncRep.setValue("state", (int)2);
+        m_syncRep.setValue("providerId", providerId);
         OC::OCPlatform::notifyAllObservers(m_syncHandle);
     }
 
     void setMessage(const uint64_t & id, const std::string & title, const std::string & content)
     {
         std::string providerId = "123456789012345678901234567890123456";
-        m_messageRep.setValue<int>("MESSAGE_ID", id);
-        m_messageRep.setValue("TITLE", title);
-        m_messageRep.setValue("CONTENTTEXT", content);
-        m_messageRep.setValue("PROVIDER_ID", providerId);
+        m_messageRep.setValue<int>("messageId", id);
+        m_messageRep.setValue("title", title);
+        m_messageRep.setValue("contentText", content);
+        m_messageRep.setValue("providerId", providerId);
     }
 
     void deleteNotificationResource()
@@ -277,7 +277,7 @@ public:
         OC::OCPlatform::startPresence(30);
 
         std::string notificationUri = m_notificationUri;
-        std::string resourceTypeName = "oic.r.message.notification";
+        std::string resourceTypeName = "oic.wk.notification.message";
         std::string resourceInterface = OC::DEFAULT_INTERFACE;
 
         uint8_t resourceProperty = OC_OBSERVABLE;
@@ -296,7 +296,7 @@ public:
             std::cout << e.what() << std::endl;
         }
 
-        resourceTypeName = "oic.r.sync.notification";
+        resourceTypeName = "oic.wk.notification.sync";
         childUri = uri + m_syncUri;
         try
         {
@@ -313,7 +313,7 @@ public:
         }
 
         resourceProperty = OC_DISCOVERABLE;
-        resourceTypeName = "oic.r.notification";
+        resourceTypeName = "oic.wk.notification";
         try
         {
             OC::OCPlatform::registerResource(
diff --git a/service/notification/examples/android/NotiConsumerExample/app/src/main/java/com/sec/noticonsumerexample/ConsumerProxy.java b/service/notification/examples/android/NotiConsumerExample/app/src/main/java/com/sec/noticonsumerexample/ConsumerProxy.java
deleted file mode 100755 (executable)
index 175356d..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-/******************************************************************\r
- * Copyright 2016 Samsung Electronics All Rights Reserved.\r
- * <p>\r
- * <p>\r
- * <p>\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
- * <p>\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- * <p>\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
-package com.sec.noticonsumerexample;\r
-\r
-import android.app.NotificationManager;\r
-import android.content.Context;\r
-import android.os.Handler;\r
-import android.os.Message;\r
-import android.util.Log;\r
-import android.widget.Toast;\r
-\r
-import org.iotivity.base.ModeType;\r
-import org.iotivity.base.OcPlatform;\r
-import org.iotivity.base.OcResourceHandle;\r
-import org.iotivity.base.PlatformConfig;\r
-import org.iotivity.base.QualityOfService;\r
-import org.iotivity.base.ServiceType;\r
-import org.iotivity.service.ns.common.NSException;\r
-import org.iotivity.service.ns.common.SyncInfo;\r
-import org.iotivity.service.ns.common.TopicsList;\r
-import org.iotivity.service.ns.consumer.ConsumerService;\r
-import org.iotivity.service.ns.consumer.Provider;\r
-\r
-import java.util.HashMap;\r
-\r
-public class ConsumerProxy\r
-    implements ConsumerService.OnProviderDiscoveredListener,\r
-    Provider.OnProviderStateListener,\r
-    Provider.OnMessageReceivedListner, Provider.OnSyncInfoReceivedListner\r
-{\r
-    private static final String TAG = "NS_CONSUMER_PROXY";\r
-\r
-    private Context mContext = null;\r
-    private ConsumerService consumerService = null;\r
-    private boolean mAcceptor = false;\r
-    private Provider mProvider = null;\r
-\r
-    private Handler mHandler = null;\r
-\r
-    private static final int PROVIDER_DISCOVERED = 1;\r
-    private static final int STATE_CHANGED = 2;\r
-    private static final int MESSAGE_RECEIVED = 3;\r
-    private static final int SYNCINFO_RECEIVED = 4;\r
-    private static final int TOPICS_RECEIVED = 5;\r
-\r
-    public ConsumerProxy(Context context)\r
-    {\r
-        Log.i(TAG, "Create consumerProxy Instance");\r
-\r
-        this.mContext = context;\r
-        consumerService = new ConsumerService();\r
-    }\r
-\r
-    public void setHandler(Handler handler)\r
-    {\r
-        this.mHandler = handler;\r
-    }\r
-\r
-    public boolean getAcceptor()\r
-    {\r
-        return mAcceptor;\r
-    }\r
-\r
-    private void configurePlatform()\r
-    {\r
-\r
-        PlatformConfig platformConfig = new PlatformConfig(\r
-            mContext,\r
-            ServiceType.IN_PROC,\r
-            ModeType.CLIENT_SERVER,\r
-            "0.0.0.0", // By setting to "0.0.0.0", it binds to all available interfaces\r
-            0,         // Uses randomly available port\r
-            QualityOfService.LOW\r
-        );\r
-\r
-        Log.i(TAG, "Configuring platform.");\r
-        OcPlatform.Configure(platformConfig);\r
-        try\r
-        {\r
-            OcPlatform.stopPresence(); // Initialize OcPlatform\r
-        }\r
-        catch (Exception e)\r
-        {\r
-            Log.e(TAG, "Exception: stopping presence when configuration step: " + e);\r
-        }\r
-        Log.i(TAG, "Configuration done Successfully");\r
-    }\r
-\r
-    public void startNotificationConsumer()\r
-    {\r
-        configurePlatform();\r
-        try\r
-        {\r
-            consumerService.start(this);\r
-        }\r
-        catch (Exception e)\r
-        {\r
-            Log.e(TAG, "Exception: startNotificationConsumer : " + e);\r
-        }\r
-    }\r
-\r
-    public void stopNotificationConsumer()\r
-    {\r
-        try\r
-        {\r
-            consumerService.stop();\r
-            mProvider = null;\r
-        }\r
-        catch (Exception e)\r
-        {\r
-            Log.e(TAG, "Exception: stopNotificationConsumer : " + e);\r
-        }\r
-    }\r
-\r
-    public void enableRemoteService(String serverAddress)\r
-    {\r
-        try\r
-        {\r
-            consumerService.enableRemoteService(serverAddress);\r
-        }\r
-        catch (Exception e)\r
-        {\r
-            Log.e(TAG, "Exception: enableRemoteService : " + e);\r
-        }\r
-    }\r
-\r
-    public void rescanProvider()\r
-    {\r
-        try\r
-        {\r
-            consumerService.rescanProvider();\r
-        }\r
-        catch (Exception e)\r
-        {\r
-            Log.e(TAG, "Exception: rescanProvider : " + e);\r
-        }\r
-    }\r
-    public void getTopicsList()\r
-    {\r
-        if (mProvider != null)\r
-        {\r
-            try\r
-            {\r
-                TopicsList topicsList = mProvider.getTopicList();\r
-            }\r
-            catch (Exception e)\r
-            {\r
-                Log.e(TAG, "Exception: getTopicsList : " + e);\r
-            }\r
-        }\r
-        else\r
-        {\r
-            Log.e(TAG, "getTopicsList Provider NULL");\r
-        }\r
-    }\r
-    public void updateTopicList(TopicsList topicsList)\r
-    {\r
-        if (mProvider != null)\r
-        {\r
-            try\r
-            {\r
-                mProvider.updateTopicList(topicsList);\r
-            }\r
-            catch (Exception e)\r
-            {\r
-                Log.e(TAG, "Exception: updateTopicList : " + e);\r
-            }\r
-        }\r
-        else\r
-        {\r
-            Log.e(TAG, "updateTopicList Provider NULL");\r
-        }\r
-    }\r
-    @Override\r
-    public void onProviderDiscovered(Provider provider)\r
-    {\r
-        Log.i(TAG, "onProviderDiscovered");\r
-        if (provider == null)\r
-        {\r
-            Log.e(TAG, "providerID is Null  ");\r
-            return;\r
-        }\r
-        mProvider = provider;\r
-        Log.i(TAG, "Provider ID: " + provider.getProviderId() );\r
-        Message msg = mHandler.obtainMessage(PROVIDER_DISCOVERED,\r
-                                             "Provider Discovered Id: " + provider.getProviderId());\r
-        mHandler.sendMessage(msg);\r
-        try\r
-        {\r
-            Log.i(TAG, "setListeners to Discovered Provider");\r
-            provider.setListener(this, this, this);\r
-            Log.i(TAG, "setListeners done");\r
-            if (! provider.isSubscribed())\r
-            {\r
-                Log.i(TAG, "Provider not subscribed. Acceptor is Consumer");\r
-                mAcceptor = false;\r
-                provider.subscribe();\r
-            }\r
-            else\r
-            {\r
-                Log.i(TAG, "Provider is already subscribed. Acceptor is Provider");\r
-                mAcceptor = true;\r
-            }\r
-        }\r
-        catch (Exception e)\r
-        {\r
-            Log.e(TAG, "Exception : " + e);\r
-        }\r
-    }\r
-\r
-    @Override\r
-    public void onProviderStateReceived(Provider.ProviderState state)\r
-    {\r
-        Log.i(TAG, "onProviderStateReceived");\r
-\r
-        Log.i(TAG, "Provider state: " + state );\r
-        Message msg = mHandler.obtainMessage(STATE_CHANGED, "Provider state: " + state);\r
-        mHandler.sendMessage(msg);\r
-    }\r
-\r
-    @Override\r
-    public void onMessageReceived(org.iotivity.service.ns.common.Message message)\r
-    {\r
-        Log.i(TAG, "onMessageReceived");\r
-\r
-        Log.i(TAG, "Message Id: " + message.getMessageId());\r
-        Log.i(TAG, "Message title: " + message.getTitle());\r
-        Log.i(TAG, "Message Content: " + message.getContentText());\r
-        Log.i(TAG, "Message Topic: " + message.getTopic());\r
-        Log.i(TAG, "Message Source: " + message.getSourceName());\r
-\r
-        Message msg = mHandler.obtainMessage(MESSAGE_RECEIVED,\r
-                                             "Message Id: " + message.getMessageId() + "\n" +\r
-                                             "Message title: " + message.getTitle() + "\n" +\r
-                                             "Message Content: " + message.getContentText() + "\n" +\r
-                                             "Message Topic: " + message.getTopic() + "\n" +\r
-                                             "Message Source: " + message.getSourceName() );\r
-        mHandler.sendMessage(msg);\r
-        try\r
-        {\r
-            Log.i(TAG, "send READ syncInfo");\r
-            mProvider.sendSyncInfo(message.getMessageId(), SyncInfo.SyncType.READ);\r
-        }\r
-        catch (Exception e)\r
-        {\r
-            Log.e(TAG, "Exception : " + e);\r
-        }\r
-    }\r
-\r
-    @Override\r
-    public void onSyncInfoReceived(SyncInfo sync)\r
-    {\r
-        Log.i(TAG, "onSyncInfoReceived");\r
-\r
-        Log.i(TAG, "Sync Id: " + sync.getMessageId());\r
-        Log.i(TAG, "Sync STATE: " + sync.getState());\r
-        Message msg = mHandler.obtainMessage(SYNCINFO_RECEIVED,\r
-                                             "Sync Id: " + sync.getMessageId() + "\n" +\r
-                                             "Sync STATE: " + sync.getState());\r
-        mHandler.sendMessage(msg);\r
-    }\r
-}\r
index 7d9e463..d79c440 100755 (executable)
@@ -18,9 +18,6 @@
 \r
 package com.sec.noticonsumerexample;\r
 \r
-import android.app.Notification;\r
-import android.app.NotificationManager;\r
-import android.content.Intent;\r
 import android.os.Bundle;\r
 import android.os.Handler;\r
 import android.os.Message;\r
@@ -28,11 +25,11 @@ import android.support.v7.app.AppCompatActivity;
 import android.util.Log;\r
 import android.view.View;\r
 import android.widget.Button;\r
-import android.widget.EditText;\r
 import android.widget.TextView;\r
 import android.widget.Toast;\r
 \r
 import org.iotivity.service.ns.common.TopicsList;\r
+import org.iotivity.service.ns.common.Topic;\r
 \r
 public class MainActivity extends AppCompatActivity\r
 {\r
@@ -44,12 +41,12 @@ public class MainActivity extends AppCompatActivity
     private Button btnEnableRemoteService;\r
     private Button btnGetTopicList;\r
     private Button btnUpdateTopicList;\r
+    private Button btnClearLog;\r
     private static TextView TvLog;\r
 \r
     private boolean isStarted = false;\r
-    private String consumerId;\r
 \r
-    private ConsumerProxy mConsumerProxy = null;\r
+    private ConsumerSample mConsumerSample = null;\r
 \r
     private static final int PROVIDER_DISCOVERED = 1;\r
     private static final int STATE_CHANGED = 2;\r
@@ -100,6 +97,15 @@ public class MainActivity extends AppCompatActivity
                         }\r
                         break;\r
                     }\r
+                case TOPICS_RECEIVED:\r
+                    {\r
+                        String topicList = (String) msg.obj;\r
+                        if (topicList != null)\r
+                        {\r
+                            TvLog.append( topicList + "\n");\r
+                        }\r
+                        break;\r
+                    }\r
                 default:\r
                     break;\r
             }\r
@@ -130,6 +136,7 @@ public class MainActivity extends AppCompatActivity
         btnEnableRemoteService = (Button) findViewById(R.id.BtnEnableRemoteService);\r
         btnGetTopicList = (Button) findViewById(R.id.BtnGetTopicList);\r
         btnUpdateTopicList = (Button) findViewById(R.id.BtnUpdateTopicList);\r
+        btnClearLog = (Button) findViewById(R.id.BtnClearLog);\r
 \r
         TvLog = (TextView) findViewById(R.id.TvLog);\r
 \r
@@ -139,24 +146,20 @@ public class MainActivity extends AppCompatActivity
         btnEnableRemoteService.setOnClickListener(mClickListener);\r
         btnGetTopicList.setOnClickListener(mClickListener);\r
         btnUpdateTopicList.setOnClickListener(mClickListener);\r
+        btnClearLog.setOnClickListener(mClickListener);\r
 \r
-        mConsumerProxy = new ConsumerProxy(getApplicationContext());\r
-        mConsumerProxy.setHandler(mHandler);\r
+        mConsumerSample = new ConsumerSample(getApplicationContext());\r
+        mConsumerSample.setHandler(mHandler);\r
     }\r
 \r
     @Override\r
     protected void onDestroy()\r
     {\r
         if (isStarted)\r
-            mConsumerProxy.stopNotificationConsumer();\r
+            mConsumerSample.stopNotificationConsumer();\r
         super.onDestroy();\r
     }\r
 \r
-    public ConsumerProxy getProviderProxy()\r
-    {\r
-        return mConsumerProxy;\r
-    }\r
-\r
     Button.OnClickListener mClickListener = new View.OnClickListener()\r
     {\r
         public void onClick(View v)\r
@@ -165,84 +168,103 @@ public class MainActivity extends AppCompatActivity
             {\r
                 case R.id.BtnStart:\r
                     {\r
-                        if (isStarted == false)\r
+                        if (!isStarted)\r
                         {\r
                             Log.i(TAG, "Start NS Consumer Service");\r
 \r
                             TvLog.setText("Start NS-Consumer\n");\r
-                            mConsumerProxy.startNotificationConsumer();\r
+                            mConsumerSample.startNotificationConsumer();\r
                             isStarted = true;\r
                         }\r
                         else\r
                         {\r
-                            Log.e(TAG, "NS Consumer Service had already started");\r
+                            Log.e(TAG, "NS Consumer Service has already started");\r
+                            showToast("Error : Service has already started");\r
                         }\r
                     }\r
                     break;\r
 \r
                 case R.id.BtnStop:\r
                     {\r
-                        if (isStarted == false)\r
+                        if (!isStarted)\r
                         {\r
                             Log.e(TAG, "Fail to stop service. Service has not been started");\r
+                            showToast("Error : Service has not been started");\r
                             break;\r
                         }\r
                         TvLog.append("Stop NS-Consumer\n");\r
-                        mConsumerProxy.stopNotificationConsumer();\r
+                        mConsumerSample.stopNotificationConsumer();\r
                         isStarted = false;\r
                     }\r
                     break;\r
                 case R.id.BtnRescan:\r
                     {\r
-                        if (isStarted == false)\r
+                        if (!isStarted)\r
                         {\r
                             Log.e(TAG, "Fail to rescan. Service has not been started");\r
+                            showToast("Error : Service has not been started");\r
                             break;\r
                         }\r
-\r
                         TvLog.append("Rescan NS-Consumer\n");\r
-                        mConsumerProxy.rescanProvider();\r
+                        mConsumerSample.rescanProvider();\r
                     }\r
                     break;\r
                 case R.id.BtnEnableRemoteService:\r
                     {\r
-                        if (isStarted == false)\r
+                        if (!isStarted)\r
                         {\r
                             Log.e(TAG, "Fail to Enable RemoteService. Service has not been started");\r
+                            showToast("Error : Service has not been started");\r
                             break;\r
                         }\r
                         TvLog.append("EnableRemoteService NS-Consumer\n");\r
 \r
                         //TODO: Update to read the serverAddress from UI\r
                         String serverAddress = new String();\r
-                        mConsumerProxy.enableRemoteService(serverAddress);\r
+                        mConsumerSample.enableRemoteService(serverAddress);\r
                     }\r
                     break;\r
                 case R.id.BtnGetTopicList:\r
                     {\r
-                        if (isStarted == false)\r
+                        if (!isStarted)\r
                         {\r
                             Log.e(TAG, "Fail to GetTopicList. Service has not been started");\r
+                            showToast("Error : Service has not been started");\r
                             break;\r
                         }\r
                         TvLog.append("GetTopicList NS-Consumer\n");\r
-                        mConsumerProxy.getTopicsList();\r
+                        mConsumerSample.getTopicsList();\r
                     }\r
                     break;\r
                 case R.id.BtnUpdateTopicList:\r
                     {\r
-                        if (isStarted == false)\r
+                        if (!isStarted)\r
                         {\r
                             Log.e(TAG, "Fail to UpdateTopicList. Service has not been started");\r
+                            showToast("Error : Service has not been started");\r
+                            break;\r
+                        }\r
+                        if(mConsumerSample.getAcceptor())\r
+                        {\r
+                            Log.e(TAG, "Operation Not Allowed. ProviderService Acceptor is not Consumer");\r
+                            showToast("Operation Not Allowed. ProviderService Acceptor is not Consumer");\r
                             break;\r
                         }\r
                         TvLog.append("UpdateTopicList NS-Consumer\n");\r
 \r
-                        //TODO: Update to read the TopicsList from UI\r
-                        TopicsList topicsList = new TopicsList();\r
-                        mConsumerProxy.updateTopicList(topicsList);\r
+                        TopicsList topicList = new TopicsList();\r
+                        topicList.addTopic("OCF_TOPIC1", Topic.TopicState.SUBSCRIBED);\r
+                        topicList.addTopic("OCF_TOPIC2", Topic.TopicState.SUBSCRIBED);\r
+                        topicList.addTopic("OCF_TOPIC3", Topic.TopicState.UNSUBSCRIBED);\r
+\r
+                        mConsumerSample.updateTopicList(topicList);\r
                     }\r
                     break;\r
+                case R.id.BtnClearLog:\r
+                {\r
+                    TvLog.setText("");\r
+                }\r
+                break;\r
             }\r
         }\r
     };\r
index 2a93adc..b924bc2 100755 (executable)
@@ -12,8 +12,8 @@
     <LinearLayout\r
         android:layout_width="match_parent"\r
         android:layout_height="wrap_content"\r
-        android:paddingLeft="16dp"\r
-        android:paddingRight="16dp"\r
+        android:paddingLeft="1dp"\r
+        android:paddingRight="1dp"\r
         android:orientation="vertical" >\r
 \r
         <View\r
             android:paddingRight="5dp"\r
             android:orientation="vertical" >\r
 \r
+            <LinearLayout\r
+                android:layout_width="match_parent"\r
+                android:layout_height="wrap_content"\r
+                android:paddingLeft="5dp"\r
+                android:paddingRight="5dp"\r
+                android:orientation="horizontal" >\r
             <Button\r
                 android:layout_gravity="center_vertical|center_horizontal"\r
                 android:layout_height="60dp"\r
-                android:layout_width="match_parent"\r
+                android:layout_width="wrap_content"\r
+                android:layout_weight="1"\r
                 android:id="@+id/BtnStart"\r
                 android:text="START"/>\r
             <Button\r
                 android:layout_gravity="center_vertical|center_horizontal"\r
                 android:layout_height="60dp"\r
+                android:layout_width="wrap_content"\r
+                android:layout_weight="1"\r
+                android:id="@+id/BtnStop"\r
+                android:text="STOP"/>\r
+            </LinearLayout>\r
+        </LinearLayout>\r
+        <LinearLayout\r
+            android:layout_width="match_parent"\r
+            android:layout_height="wrap_content"\r
+            android:paddingLeft="5dp"\r
+            android:paddingRight="5dp"\r
+            android:orientation="vertical" >\r
+            <LinearLayout\r
                 android:layout_width="match_parent"\r
+                android:layout_height="wrap_content"\r
+                android:paddingLeft="5dp"\r
+                android:paddingRight="5dp"\r
+                android:orientation="horizontal" >\r
+            <Button\r
+                android:layout_gravity="center_vertical|center_horizontal"\r
+                android:layout_height="60dp"\r
+                android:layout_width="wrap_content"\r
+                android:layout_weight="1"\r
                 android:id="@+id/BtnRescan"\r
                 android:text="RESCAN"/>\r
             <Button\r
                 android:layout_gravity="center_vertical|center_horizontal"\r
-                android:layout_height="0dp"\r
+                android:layout_height="60dp"\r
+                android:layout_width="wrap_content"\r
+                android:layout_weight="1"\r
+                android:id="@+id/BtnGetTopicList"\r
+                android:text="Get TopicList"/>\r
+            </LinearLayout>\r
+        </LinearLayout>\r
+        <LinearLayout\r
+            android:layout_width="match_parent"\r
+            android:layout_height="wrap_content"\r
+            android:paddingLeft="5dp"\r
+            android:paddingRight="5dp"\r
+            android:orientation="vertical" >\r
+            <LinearLayout\r
                 android:layout_width="match_parent"\r
-                android:id="@+id/BtnEnableRemoteService"\r
-                android:text="Enable Remote Service"/>\r
+                android:layout_height="wrap_content"\r
+                android:paddingLeft="5dp"\r
+                android:paddingRight="5dp"\r
+                android:orientation="vertical" >\r
             <Button\r
                 android:layout_gravity="center_vertical|center_horizontal"\r
-                android:layout_height="0dp"\r
+                android:layout_height="1dp"\r
                 android:layout_width="match_parent"\r
-                android:id="@+id/BtnGetTopicList"\r
-                android:text="Get TopicList"/>\r
+                android:id="@+id/BtnEnableRemoteService"\r
+                android:text="Enable Remote Service"/>\r
             <Button\r
                 android:layout_gravity="center_vertical|center_horizontal"\r
-                android:layout_height="0dp"\r
+                android:layout_height="60dp"\r
                 android:layout_width="match_parent"\r
                 android:id="@+id/BtnUpdateTopicList"\r
                 android:text="Update TopicList"/>\r
-        </LinearLayout>\r
-\r
-        <LinearLayout\r
-            android:layout_width="match_parent"\r
-            android:layout_height="10dp">\r
+            </LinearLayout>\r
         </LinearLayout>\r
         <LinearLayout\r
             android:layout_width="match_parent"\r
             android:paddingRight="5dp"\r
             android:orientation="horizontal" >\r
 \r
-            <TextView\r
+            <Button\r
                 android:layout_gravity="center_vertical|center_horizontal"\r
-                android:layout_height="wrap_content"\r
+                android:layout_height="60dp"\r
                 android:layout_width="match_parent"\r
-                android:id="@+id/logging"\r
-                android:text="Log.."/>\r
+                android:id="@+id/BtnClearLog"\r
+                android:text="Clear Log"/>\r
         </LinearLayout>\r
 \r
         <ScrollView\r
 \r
             <LinearLayout\r
                 android:layout_width="match_parent"\r
-                android:layout_height="150dp"\r
+                android:layout_height="1000dp"\r
                 android:paddingLeft="5dp"\r
                 android:paddingRight="5dp"\r
                 android:orientation="horizontal" >\r
 \r
                 <TextView\r
                     android:layout_gravity="center_vertical|center_horizontal"\r
-                    android:layout_height="300dp"\r
+                    android:layout_height="1000dp"\r
                     android:layout_width="match_parent"\r
                     android:scrollbars="vertical"\r
                     android:id="@+id/TvLog"/>\r
 \r
         </ScrollView>\r
 \r
-        <LinearLayout\r
-            android:layout_width="match_parent"\r
-            android:layout_height="wrap_content"\r
-            android:paddingLeft="5dp"\r
-            android:paddingRight="5dp"\r
-            android:orientation="horizontal" >\r
-\r
-            <Button\r
-                android:layout_gravity="center_vertical|center_horizontal"\r
-                android:layout_height="60dp"\r
-                android:layout_width="match_parent"\r
-                android:id="@+id/BtnStop"\r
-                android:text="STOP"/>\r
-        </LinearLayout>\r
 \r
         <View\r
             android:layout_width="match_parent"\r
             android:layout_alignParentBottom="true"\r
             android:background="@android:color/darker_gray"/>\r
 \r
-        <LinearLayout\r
-            android:layout_width="match_parent"\r
-            android:layout_height="20dp">\r
-        </LinearLayout>\r
-\r
     </LinearLayout>\r
 \r
 \r
diff --git a/service/notification/examples/android/NotiConsumerExample/app/src/test/java/com/sec/noticonsumerexample/ExampleUnitTest.java b/service/notification/examples/android/NotiConsumerExample/app/src/test/java/com/sec/noticonsumerexample/ExampleUnitTest.java
deleted file mode 100755 (executable)
index 050d84a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.sec.noticonsumerexample;\r
-\r
-import org.junit.Test;\r
-\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- * To work on unit tests, switch the Test Artifact in the Build Variants view.\r
- */\r
-public class ExampleUnitTest {\r
-    @Test\r
-    public void addition_isCorrect() throws Exception {\r
-        assertEquals(4, 2 + 2);\r
-    }\r
-}
\ No newline at end of file
diff --git a/service/notification/examples/android/NotiConsumerExample/iotivity-armeabi-notification-service-release/build.gradle b/service/notification/examples/android/NotiConsumerExample/iotivity-armeabi-notification-service-release/build.gradle
deleted file mode 100755 (executable)
index 0cc2c63..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-configurations.maybeCreate("default")
-artifacts.add("default", file('iotivity-armeabi-notification-service-release.aar'))
\ No newline at end of file
diff --git a/service/notification/examples/android/NotiConsumerExample/iotivity-base-armeabi-release/build.gradle b/service/notification/examples/android/NotiConsumerExample/iotivity-base-armeabi-release/build.gradle
deleted file mode 100755 (executable)
index a4078ab..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-configurations.maybeCreate("default")
-artifacts.add("default", file('iotivity-base-armeabi-release.aar'))
\ No newline at end of file
index 836b36e..9d495b3 100755 (executable)
@@ -1 +1 @@
-include ':app', ':iotivity-base-armeabi-release', ':iotivity-armeabi-notification-service-release'
\ No newline at end of file
+include ':app'
\ No newline at end of file
index c20792d..38ea4c4 100644 (file)
@@ -16,6 +16,4 @@ android {
 dependencies {\r
     compile fileTree(include: ['*.jar'], dir: 'libs')\r
     compile 'com.android.support:appcompat-v7:23.0.1'\r
-    compile project(':iotivity-armeabi-notification-service-debug')\r
-    compile project(':iotivity-base-armeabi-debug')\r
 }\r
index a5072f6..c9d821c 100755 (executable)
@@ -25,7 +25,6 @@ package com.sec.notiproviderexample;
 import android.app.Notification;\r
 import android.app.NotificationManager;\r
 import android.content.Intent;\r
-import android.content.SyncInfo;\r
 import android.os.Bundle;\r
 import android.os.Handler;\r
 import android.os.Message;\r
@@ -34,10 +33,15 @@ import android.util.Log;
 import android.view.View;\r
 import android.widget.Button;\r
 import android.widget.EditText;\r
+import android.widget.RadioButton;\r
 import android.widget.TextView;\r
 import android.widget.Toast;\r
 \r
 import org.iotivity.service.ns.common.MediaContents;\r
+\r
+import java.text.DateFormat;\r
+import java.util.Date;\r
+\r
 public class MainActivity extends AppCompatActivity {\r
 \r
     private final String TAG = "NS_MAIN_ACTIVITY";\r
@@ -47,22 +51,28 @@ public class MainActivity extends AppCompatActivity {
 \r
     private Button btnTitle;\r
     private Button btnBody;\r
+    private Button btnTopic;\r
     private Button btnSend;\r
     private Button btnStart;\r
+    private Button btnRegister;\r
+    private Button btnSet;\r
     private Button btnStop;\r
-    private Button btnAccept;\r
-    private Button btnSync;\r
+    private Button btnLog;\r
     private EditText editTextTitle;\r
     private EditText editTextBody;\r
+    private EditText editTextTopic;\r
+    private RadioButton radioProvider;\r
+    private RadioButton radioConsumer;\r
     private static TextView TvLog;\r
 \r
     private static int notiId = 100;\r
     private static int subCnt = 0;\r
     private boolean isStarted = false;\r
     private String consumerId;\r
+    private boolean gAcceptor = true;\r
 \r
     private NotiListener mNotiListener = null;\r
-    private ProviderProxy mProviderProxy = null;\r
+    private ProviderSample mProviderSample = null;\r
 \r
     public static Handler mHandler = new Handler() {\r
         @Override\r
@@ -103,35 +113,39 @@ public class MainActivity extends AppCompatActivity {
 \r
         btnTitle = (Button) findViewById(R.id.BtnTitle);\r
         btnBody = (Button) findViewById(R.id.BtnBody);\r
+        btnTopic = (Button) findViewById(R.id.BtnTopic);\r
         btnSend = (Button) findViewById(R.id.BtnCreateNoti);\r
 \r
         btnStart = (Button) findViewById(R.id.BtnStart);\r
-        btnAccept = (Button) findViewById(R.id.BtnAccept);\r
-        btnSync = (Button) findViewById(R.id.BtnSync);\r
+        btnRegister = (Button) findViewById(R.id.BtnRegister);\r
+        btnSet = (Button) findViewById(R.id.BtnSet);\r
+        btnLog = (Button) findViewById(R.id.BtnLog);\r
         btnStop = (Button) findViewById(R.id.BtnStop);\r
 \r
         editTextTitle = (EditText) findViewById(R.id.EditTextTitle);\r
         editTextBody = (EditText) findViewById(R.id.EditTextBody);\r
+        editTextTopic = (EditText) findViewById(R.id.EditTextTopic);\r
+\r
+        radioProvider = (RadioButton) findViewById(R.id.RadioProvider);\r
+        radioConsumer = (RadioButton) findViewById(R.id.RadioConsumer);\r
 \r
         TvLog = (TextView) findViewById(R.id.TvLog);\r
 \r
         btnTitle.setEnabled(false);\r
         btnBody.setEnabled(false);\r
+        btnTopic.setEnabled(false);\r
 \r
         btnSend.setOnClickListener(mClickListener);\r
-\r
         btnStart.setOnClickListener(mClickListener);\r
-\r
-        btnAccept.setOnClickListener(mClickListener);\r
-        btnAccept.setVisibility(View.INVISIBLE);\r
-\r
-        btnSync.setOnClickListener(mClickListener);\r
-        btnSync.setVisibility(View.INVISIBLE);\r
-\r
+        btnRegister.setOnClickListener(mClickListener);\r
+        btnSet.setOnClickListener(mClickListener);\r
+        btnLog.setOnClickListener(mClickListener);\r
         btnStop.setOnClickListener(mClickListener);\r
+        radioProvider.setOnClickListener(mClickListener);\r
+        radioConsumer.setOnClickListener(mClickListener);\r
 \r
-        mProviderProxy = new ProviderProxy(getApplicationContext());\r
-        mProviderProxy.setHandler(mHandler);\r
+        mProviderSample = new ProviderSample(getApplicationContext());\r
+        mProviderSample.setHandler(mHandler);\r
 \r
         mNotiListener = new NotiListener(this);\r
 \r
@@ -144,36 +158,80 @@ public class MainActivity extends AppCompatActivity {
         super.onDestroy();\r
     }\r
 \r
-    public ProviderProxy getProviderProxy()\r
+    public ProviderSample getProviderSample()\r
     {\r
-        return mProviderProxy;\r
+        return mProviderSample;\r
     }\r
 \r
     Button.OnClickListener mClickListener = new View.OnClickListener() {\r
         public void onClick(View v) {\r
             switch (v.getId()) {\r
-\r
-                case R.id.BtnStart: {\r
+                case R.id.RadioProvider: {\r
                     if (isStarted == false) {\r
-                        Log.i(TAG, "Start NS Provider Service");\r
+                        gAcceptor = true;\r
+                        showToast("Provider as acceptor is " + gAcceptor);\r
+                    }\r
+                    else\r
+                        showToast("Start ProviderService again to change acceptor as provider");\r
+                }\r
+                break;\r
 \r
-                        TvLog.setText("Start NS-Provider\n");\r
+                case R.id.RadioConsumer: {\r
+                    if (isStarted == false) {\r
+                        gAcceptor = false;\r
+                        showToast("Provider as acceptor is "+ gAcceptor);\r
+                    }\r
+                    else\r
+                        showToast("Start ProviderService again to change acceptor as consumer");\r
+                }\r
+                break;\r
 \r
-                        boolean policy = true; // provider controls the acceptance of consumers\r
-                        mProviderProxy.Start(policy);\r
+                case R.id.BtnStart: {\r
+                    if (isStarted == false) {\r
+                        Log.i(TAG, "Start  Provider Service");\r
+                        TvLog.setText("Start Provider Service\n");\r
+                        mProviderSample.Start(gAcceptor);\r
                         isStarted = true;\r
+                        radioProvider.setEnabled(false);\r
+                        radioConsumer.setEnabled(false);\r
                     } else {\r
-                        Log.e(TAG, "NS Provider Service had already started");\r
+                        Log.e(TAG, " Provider Service had already started");\r
+                        showToast(" Provider Service had already started");\r
                     }\r
                 }\r
                 break;\r
 \r
-                case R.id.BtnAccept: {\r
-                    if(isStarted == false)\r
-                    {\r
-                        Log.e(TAG, "Fail to request Accept");\r
+                case R.id.BtnRegister: {\r
+                    if (isStarted == false) {\r
+                        Log.i(TAG, "Start  Provider Service");\r
+                        TvLog.append("Register Topic : OCF_TOPIC1\n");\r
+                        TvLog.append("Register Topic : OCF_TOPIC2\n");\r
+                        TvLog.append("Register Topic : OCF_TOPIC3\n");\r
+                        TvLog.append("Register Topic : OCF_TOPIC4\n");\r
+                        showToast("Start Provider Service First");\r
                         break;\r
                     }\r
+                    mProviderSample.RegisterTopic();\r
+\r
+                }\r
+                break;\r
+\r
+                case R.id.BtnSet: {\r
+                    if (isStarted == false) {\r
+                        Log.i(TAG, "Start Provider Service");\r
+                        TvLog.append("Set Topic : OCF_TOPIC1\n");\r
+                        TvLog.append("Set Topic : OCF_TOPIC2\n");\r
+                        TvLog.append("Set Topic : OCF_TOPIC3\n");\r
+                        TvLog.append("Set Topic : OCF_TOPIC4\n");\r
+                        showToast("Start Provider Service First");\r
+                        break;\r
+                    }\r
+                    if(gAcceptor == false){\r
+                        showToast("Operation Not Permitted: \nStart Provider Service with provider as acceptor");\r
+                        break;\r
+                    }\r
+                    mProviderSample.SetTopic();\r
+\r
                 }\r
                 break;\r
 \r
@@ -182,10 +240,12 @@ public class MainActivity extends AppCompatActivity {
                     String id = Integer.toString(notiId); // generate notificaion ID\r
                     String title = editTextTitle.getText().toString();\r
                     String body = editTextBody.getText().toString();\r
+                    String topic  = editTextTopic.getText().toString();\r
 \r
                     if(isStarted == false)\r
                     {\r
                         Log.e(TAG, "Fail to send NSMessage");\r
+                        showToast("Start ProviderService First");\r
                         break;\r
                     }\r
 \r
@@ -202,41 +262,38 @@ public class MainActivity extends AppCompatActivity {
                     Log.i(TAG, "#" + notiId + " notified ..");\r
                     TvLog.append("Send Notitication(Msg ID: " + notiId + ")\n");\r
                     notiId++;\r
-                    org.iotivity.service.ns.common.Message notiMessage = new org.iotivity.service.ns.common.Message(title,body,"dss");\r
+                    org.iotivity.service.ns.common.Message notiMessage = new org.iotivity.service.ns.common.Message(title,body,"provider");\r
                     notiMessage.setTTL(10);\r
-                    notiMessage.setTime("12:10");\r
-                    MediaContents media = new MediaContents("daasd");\r
+                    notiMessage.setTime(DateFormat.getDateTimeInstance().format(new Date()));\r
+                    notiMessage.setTopic(topic);\r
+                    MediaContents media = new MediaContents("Video");\r
                     notiMessage.setMediaContents(media);\r
-                    mProviderProxy.SendMessage(notiMessage);\r
-                }\r
-                break;\r
-\r
-                case R.id.BtnSync: {\r
-                    if(isStarted == false)\r
-                    {\r
-                        Log.e(TAG, "Fail to send sync");\r
-                        break;\r
-                    }\r
-                    org.iotivity.service.ns.common.SyncInfo.SyncType syncType =  org.iotivity.service.ns.common.SyncInfo.SyncType.READ;\r
-                    mProviderProxy.SendSyncInfo(1,syncType);\r
+                    mProviderSample.SendMessage(notiMessage);\r
                 }\r
                 break;\r
 \r
                 case R.id.BtnStop: {\r
-                    if(isStarted == false)\r
-                    {\r
+                    if(isStarted == false) {\r
                         Log.e(TAG, "Fail to stop service");\r
+                        showToast("Already Stopped");\r
                         break;\r
                     }\r
 \r
-                    mProviderProxy.Stop();\r
+                    mProviderSample.Stop();\r
                     isStarted = false;\r
-\r
-                    TvLog.append("Stop NS-Provider\n");\r
+                    radioProvider.setEnabled(true);\r
+                    radioConsumer.setEnabled(true);\r
+                    showToast("Stopped ProviderService"+ isStarted);\r
+                    TvLog.append("Stop Provider Service\n");\r
                 }\r
                 break;\r
+\r
+                case R.id.BtnLog: {\r
+\r
+                    TvLog.setText("");\r
+                }\r
+                break;  }\r
             }\r
-        }\r
     };\r
 }\r
 \r
index d68560b..27c7c7c 100755 (executable)
@@ -23,7 +23,6 @@
 package com.sec.notiproviderexample;\r
 \r
 import android.app.Notification;\r
-import android.content.SyncInfo;\r
 import android.os.Bundle;\r
 import android.service.notification.NotificationListenerService;\r
 import android.service.notification.StatusBarNotification;\r
@@ -35,7 +34,7 @@ import java.util.ArrayList;
 public class NotiListener extends NotificationListenerService {\r
 \r
     private final String TAG = "NS_JNI_NOTI_LISTENER";\r
-    private static ProviderProxy mProviderProxy = null;\r
+    private static ProviderSample mProviderSample = null;\r
     private MainActivity mActivity = null;\r
     ArrayList mBlackSourceList = new ArrayList<String>();\r
 \r
@@ -49,11 +48,11 @@ public class NotiListener extends NotificationListenerService {
         Log.i(TAG, "Create NotiListener with MainActivity");\r
 \r
         this.mActivity = activity;\r
-        this.mProviderProxy = mActivity.getProviderProxy();\r
+        this.mProviderSample = mActivity.getProviderSample();\r
 \r
         setBlackSourceList();\r
 \r
-        if(mProviderProxy == null) {\r
+        if(mProviderSample == null) {\r
             Log.i(TAG, "Fail to get providerProxy instance");\r
         }\r
     }\r
@@ -111,8 +110,8 @@ public class NotiListener extends NotificationListenerService {
         notiMessage.setTime("12:10");\r
         MediaContents media = new MediaContents("daasd");\r
         notiMessage.setMediaContents(media);\r
-        if (mProviderProxy != null) {\r
-            mProviderProxy.SendMessage(notiMessage);\r
+        if (mProviderSample != null) {\r
+            mProviderSample.SendMessage(notiMessage);\r
         } else {\r
             Log.i(TAG, "providerExample is NULL");\r
         }\r
@@ -130,12 +129,12 @@ public class NotiListener extends NotificationListenerService {
         Log.i(TAG, "Noti. Package Name : " + sbn.getPackageName());\r
         Log.i(TAG, "Noti. ID : " + sbn.getId());\r
 \r
-        if(mProviderProxy.getMsgMap().containsKey(sbn.getId()))\r
+        if(mProviderSample.getMsgMap().containsKey(sbn.getId()))\r
         {\r
-            if(mProviderProxy.getMsgMap().get(sbn.getId()) == 2)\r
+            if(mProviderSample.getMsgMap().get(sbn.getId()) == 2)\r
             {\r
                 org.iotivity.service.ns.common.SyncInfo.SyncType type = org.iotivity.service.ns.common.SyncInfo.SyncType.READ;\r
-                mProviderProxy.SendSyncInfo(1,type);\r
+                mProviderSample.SendSyncInfo(1,type);\r
             }\r
         }\r
     }\r
diff --git a/service/notification/examples/android/NotiProviderExample/app/src/main/java/com/sec/notiproviderexample/ProviderProxy.java b/service/notification/examples/android/NotiProviderExample/app/src/main/java/com/sec/notiproviderexample/ProviderProxy.java
deleted file mode 100755 (executable)
index 0c5aada..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/*\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
-\r
-package com.sec.notiproviderexample;\r
-\r
-import android.content.Context;\r
-import android.os.*;\r
-import android.util.Log;\r
-import android.widget.Toast;\r
-\r
-import org.iotivity.base.ModeType;\r
-import org.iotivity.base.OcPlatform;\r
-import org.iotivity.base.OcResourceHandle;\r
-import org.iotivity.base.PlatformConfig;\r
-import org.iotivity.base.QualityOfService;\r
-import org.iotivity.base.ServiceType;\r
-import org.iotivity.service.ns.common.Message;\r
-import org.iotivity.service.ns.provider.*;\r
-import org.iotivity.service.ns.common.*;\r
-\r
-\r
-import java.util.HashMap;\r
-\r
-public class ProviderProxy\r
-        implements ProviderService.OnConsumerSubscribedListener, ProviderService.OnMessageSynchronizedListener{\r
-\r
-    private static final String TAG = "NS_PROVIDER_PROXY";\r
-\r
-    private Context mContext = null;\r
-    private OcResourceHandle mResourceHandle;   //resource handle\r
-    private ProviderService ioTNotification = null;\r
-    private HashMap<String, Integer> msgMap;\r
-\r
-    private Handler mHandler = null;\r
-\r
-    private static final int CONSUMER_SUBSCRIBED = 1;\r
-    private static final int MESSAGE_SYNC = 2;\r
-\r
-    private static final int SYNC_READ = 0;\r
-    private static final int SYNC_DISMISS = 1;\r
-    private static final int SYNC_UNREAD = 2;\r
-\r
-    public ProviderProxy(Context context) {\r
-        Log.i(TAG, "Create providerProxy Instance");\r
-\r
-        this.msgMap = new HashMap<>();\r
-        this.mContext = context;\r
-        ioTNotification =  ProviderService.getInstance();\r
-    }\r
-\r
-    public void setHandler(Handler handler)\r
-    {\r
-        this.mHandler = handler;\r
-    }\r
-\r
-    private void configurePlatform() {\r
-\r
-        PlatformConfig platformConfig = new PlatformConfig(\r
-                mContext,\r
-                ServiceType.IN_PROC,\r
-                ModeType.CLIENT_SERVER,\r
-                "0.0.0.0", // By setting to "0.0.0.0", it binds to all available interfaces\r
-                0,         // Uses randomly available port\r
-                QualityOfService.LOW\r
-        );\r
-\r
-        Log.i(TAG, "Configuring platform.");\r
-        OcPlatform.Configure(platformConfig);\r
-        try {\r
-            OcPlatform.stopPresence(); // Initialize OcPlatform\r
-        } catch(Exception e) {\r
-            Log.e(TAG, "Exception: stopping presence when configuration step: " + e);\r
-        }\r
-        Log.i(TAG, "Configuration done Successfully");\r
-    }\r
-\r
-    public void Start(boolean policy)\r
-    {\r
-        Log.i(TAG, "Start ProviderService -IN");\r
-        configurePlatform();\r
-        try{\r
-            int result =  ioTNotification.start(this, this, policy, "Info");\r
-            Log.i(TAG, "Notification Start: " + result);\r
-        }\r
-        catch(Exception e){\r
-\r
-        }\r
-\r
-        Log.i(TAG, "Start ProviderService - OUT");\r
-    }\r
-\r
-    public void Stop() {\r
-        Log.i(TAG, "Stop ProviderService - IN");\r
-        try {\r
-            OcPlatform.stopPresence();\r
-        } catch (Exception e) {\r
-            Log.e(TAG, "Exception: stopping presence when terminating NS server: " + e);\r
-        }\r
-        try{\r
-            int result =  ioTNotification.stop();\r
-            Log.i(TAG, "Notification Stop: " + result);\r
-        }\r
-        catch(Exception e){\r
-\r
-        }\r
-\r
-        Log.i(TAG, "Stop ProviderService - OUT");\r
-    }\r
-\r
-    public void SendMessage(Message notiMessage) {\r
-        Log.i(TAG, "SendMessage ProviderService - IN");\r
-\r
-        try{\r
-            int result =  ioTNotification.sendMessage(notiMessage);\r
-            Log.i(TAG, "Notification Send Message: " + result);\r
-        }\r
-        catch(Exception e){\r
-\r
-        }\r
-\r
-        Log.i(TAG, "SendMessage ProviderService - OUT");\r
-        mHandler.post(new Runnable() {\r
-            @Override\r
-            public void run() {\r
-                Toast.makeText(mContext, "Notification sent", Toast.LENGTH_SHORT).show();\r
-            }\r
-        });\r
-    }\r
-\r
-    public void SendSyncInfo(long messageId, SyncInfo.SyncType syncType) {\r
-        Log.i(TAG, "SendSyncInfo ProviderService - IN");\r
-        if(msgMap.containsKey(messageId)) {\r
-            if(msgMap.get(messageId) == SYNC_UNREAD)\r
-            {\r
-                try{\r
-                    ioTNotification.sendSyncInfo(messageId, syncType);\r
-                    Log.i(TAG, "Notification Sync " );\r
-                }\r
-                catch(Exception e) {\r
-\r
-                }\r
-                Log.i(TAG, "SendSyncInfo ProviderService - OUT");\r
-                msgMap.put("ID: "+messageId, SYNC_READ);\r
-            }\r
-        }\r
-    }\r
-\r
-    public void EnableRemoteService(String servAdd) {\r
-        Log.i(TAG, "EnableRemoteService ProviderService - IN");\r
-        try{\r
-            int result = ioTNotification.enableRemoteService(servAdd);\r
-            Log.i(TAG, "Notification EnableRemoteService: "+ result );\r
-        }\r
-        catch(Exception e) {\r
-\r
-        }\r
-        Log.i(TAG, "EnableRemoteService ProviderService - OUT");\r
-    }\r
-\r
-    public void DisableRemoteService(String servAdd) {\r
-        Log.i(TAG, "DisableRemoteService ProviderService - IN");\r
-        try{\r
-            int result = ioTNotification.disableRemoteService(servAdd);\r
-            Log.i(TAG, "Notification DisableRemoteService: "+ result );\r
-        }\r
-        catch(Exception e) {\r
-\r
-        }\r
-        Log.i(TAG, "DisableRemoteService ProviderService - OUT");\r
-    }\r
-\r
-    public void AcceptSubscription(Consumer consumer, boolean accepted)\r
-    {\r
-        Log.i(TAG,"AcceptSubscription ProviderService - IN");\r
-        try{\r
-            int result = consumer.acceptSubscription(accepted);\r
-            Log.i(TAG, "Notification AcceptSubscription: "+result );\r
-        }\r
-        catch(Exception e) {\r
-\r
-        }\r
-        Log.i(TAG, "AcceptSubscription ProviderService - OUT");\r
-    }\r
-\r
-    @Override\r
-    public void onConsumerSubscribed(Consumer consumer) {\r
-        Log.i(TAG, "onConsumerSubscribed - IN");\r
-        AcceptSubscription(consumer, true);\r
-        android.os.Message msg = mHandler.obtainMessage(CONSUMER_SUBSCRIBED,\r
-                "Consumer Id: " + consumer.getConsumerId()  );\r
-        mHandler.sendMessage(msg);\r
-        Log.i(TAG, "onConsumerSubscribed - OUT");\r
-    }\r
-\r
-    @Override\r
-    public void onMessageSynchronized(SyncInfo syncInfo) {\r
-        Log.i(TAG, "Received SyncInfo with messageID: "+syncInfo.getMessageId());\r
-        android.os.Message msg = mHandler.obtainMessage(MESSAGE_SYNC,\r
-                "Message Id: " + syncInfo.getMessageId()  );\r
-        mHandler.sendMessage(msg);\r
-    }\r
-\r
-    public HashMap<String, Integer> getMsgMap() {\r
-        return msgMap;\r
-    }\r
-}\r
index 2365c5c..d109ae4 100644 (file)
     <LinearLayout\r
         android:layout_width="match_parent"\r
         android:layout_height="wrap_content"\r
-        android:paddingLeft="16dp"\r
-        android:paddingRight="16dp"\r
+        android:paddingLeft="1dp"\r
+        android:paddingRight="1dp"\r
         android:orientation="vertical" >\r
 \r
-        <View\r
-            android:layout_width="match_parent"\r
-            android:layout_height="1dp"\r
-            android:layout_alignParentBottom="true"\r
-            android:background="@android:color/darker_gray"/>\r
 \r
         <LinearLayout\r
             android:layout_width="match_parent"\r
-            android:layout_height="10dp">\r
+            android:layout_height="wrap_content"\r
+            android:paddingLeft="5dp"\r
+            android:paddingRight="5dp"\r
+            android:orientation="horizontal"\r
+            android:weightSum="1">\r
+\r
+            <Button\r
+                android:layout_height="wrap_content"\r
+                android:layout_width="150dp"\r
+                android:id="@+id/BtnStart"\r
+                android:text="START"/>\r
+\r
+            <Button\r
+                android:layout_height="wrap_content"\r
+                android:layout_width="150dp"\r
+                android:id="@+id/BtnStop"\r
+                android:text="STOP" />\r
         </LinearLayout>\r
 \r
         <LinearLayout\r
             android:layout_height="wrap_content"\r
             android:paddingLeft="5dp"\r
             android:paddingRight="5dp"\r
-            android:orientation="horizontal" >\r
+            android:orientation="horizontal"\r
+            android:weightSum="1">\r
 \r
-            <Button\r
-                android:layout_gravity="center_vertical|center_horizontal"\r
-                android:layout_height="60dp"\r
+            <RadioGroup\r
+                android:id="@+id/RadioGroup"\r
                 android:layout_width="match_parent"\r
-                android:id="@+id/BtnStart"\r
-                android:text="START"/>\r
+                android:layout_height="wrap_content"\r
+                android:layout_alignParentLeft="true"\r
+                android:orientation='horizontal'>\r
+                    <TextView\r
+                    android:layout_width="wrap_content"\r
+                    android:layout_height="wrap_content"\r
+                    android:text="ACCEPTOR: "\r
+                    android:id="@+id/textview"\r
+                    android:checked="false" />\r
+                    <RadioButton\r
+                        android:layout_width="wrap_content"\r
+                        android:layout_height="wrap_content"\r
+                        android:text="Provider"\r
+                        android:id="@+id/RadioProvider"\r
+                        android:checked="true" />\r
+\r
+                    <RadioButton\r
+                        android:layout_width="wrap_content"\r
+                        android:layout_height="wrap_content"\r
+                        android:text="Consumer"\r
+                        android:id="@+id/RadioConsumer"\r
+                        android:checked="false" />\r
+\r
+            </RadioGroup>\r
         </LinearLayout>\r
 \r
         <LinearLayout\r
             android:layout_height="wrap_content"\r
             android:paddingLeft="5dp"\r
             android:paddingRight="5dp"\r
-            android:orientation="horizontal" >\r
+            android:orientation="horizontal"\r
+            android:weightSum="1">\r
 \r
             <Button\r
-\r
                 android:layout_height="wrap_content"\r
                 android:layout_width="150dp"\r
-                android:id="@+id/BtnAccept"\r
-                android:text="ACCEPT"/>\r
+                android:id="@+id/BtnRegister"\r
+                android:text="@string/btn_reg"/>\r
 \r
             <Button\r
-\r
                 android:layout_height="wrap_content"\r
                 android:layout_width="150dp"\r
-                android:id="@+id/BtnSync"\r
-                android:text="SYNC"/>\r
+                android:id="@+id/BtnSet"\r
+                android:text="@string/btn_set" />\r
         </LinearLayout>\r
 \r
         <LinearLayout\r
                 android:layout_width="match_parent"\r
                 android:layout_height="wrap_content"\r
                 android:windowSoftInputMode="stateHidden"\r
-                android:hint="글자를 입력하세요" />\r
+                android:hint="Add Message Title" />\r
         </LinearLayout>\r
 \r
         <LinearLayout\r
                 android:layout_width="match_parent"\r
                 android:layout_height="wrap_content"\r
                 android:windowSoftInputMode="stateHidden"\r
-                android:hint="글자를 입력하세요" />\r
+                android:hint="Add Message Body" />\r
+        </LinearLayout>\r
+\r
+        <LinearLayout\r
+            android:id="@+id/Topic"\r
+            android:layout_width="match_parent"\r
+            android:layout_height="wrap_content"\r
+            android:paddingLeft="5dp"\r
+            android:paddingRight="5dp"\r
+            android:orientation="horizontal" >\r
+\r
+            <Button\r
+                android:layout_height="wrap_content"\r
+                android:layout_width="wrap_content"\r
+                android:id="@+id/BtnTopic"\r
+                android:text="@string/btn_topic"\r
+                android:onClick="selfDestruct" />\r
+\r
+            <EditText\r
+                android:id="@+id/EditTextTopic"\r
+                android:layout_width="match_parent"\r
+                android:layout_height="wrap_content"\r
+                android:windowSoftInputMode="stateHidden"\r
+                android:hint="OCF_TOPIC1 (1-4)" />\r
         </LinearLayout>\r
 \r
         <Button\r
             android:layout_gravity="center_vertical|center_horizontal"\r
-            android:layout_height="60dp"\r
+            android:layout_height="wrap_content"\r
             android:layout_width="match_parent"\r
             android:id="@+id/BtnCreateNoti"\r
             android:text="@string/btn_create_noti"\r
             />\r
-\r
+        <Button\r
+            android:layout_gravity="center_vertical|center_horizontal"\r
+            android:layout_height="wrap_content"\r
+            android:layout_width="match_parent"\r
+            android:id="@+id/BtnLog"\r
+            android:text="@string/btn_log"\r
+            android:layout_alignParentBottom="true"\r
+            android:layout_centerHorizontal="true" />\r
         <LinearLayout\r
             android:layout_width="match_parent"\r
             android:layout_height="10dp">\r
 \r
             <LinearLayout\r
                 android:layout_width="match_parent"\r
-                android:layout_height="150dp"\r
+                android:layout_height="250dp"\r
                 android:paddingLeft="5dp"\r
                 android:paddingRight="5dp"\r
                 android:orientation="horizontal" >\r
 \r
                 <TextView\r
                     android:layout_gravity="center_vertical|center_horizontal"\r
-                    android:layout_height="150dp"\r
+                    android:layout_height="1000dp"\r
                     android:layout_width="match_parent"\r
                     android:scrollbars="vertical"\r
                     android:id="@+id/TvLog"\r
 \r
         </ScrollView>\r
 \r
-        <LinearLayout\r
-            android:layout_width="match_parent"\r
-            android:layout_height="wrap_content"\r
-            android:paddingLeft="5dp"\r
-            android:paddingRight="5dp"\r
-            android:orientation="horizontal" >\r
-\r
-            <Button\r
-                android:layout_gravity="center_vertical|center_horizontal"\r
-                android:layout_height="60dp"\r
-                android:layout_width="match_parent"\r
-                android:id="@+id/BtnStop"\r
-                android:text="STOP"/>\r
-        </LinearLayout>\r
-\r
-        <View\r
-            android:layout_width="match_parent"\r
-            android:layout_height="1dp"\r
-            android:layout_alignParentBottom="true"\r
-            android:background="@android:color/darker_gray"/>\r
-\r
-        <LinearLayout\r
-            android:layout_width="match_parent"\r
-            android:layout_height="20dp">\r
-        </LinearLayout>\r
-\r
     </LinearLayout>\r
 \r
-\r
 </RelativeLayout>\r
index b762eec..80b63f8 100644 (file)
@@ -2,6 +2,10 @@
     <string name="app_name">NotificationProviderExample</string>\r
     <string name="btn_title">Title</string>\r
     <string name="btn_body">Body</string>\r
+    <string name="btn_topic">Topic</string>\r
+    <string name="btn_reg">Register Topic</string>\r
+    <string name="btn_set">Set Topic</string>\r
     <string name="btn_send">Send Notification</string>\r
-    <string name="btn_create_noti">Create Notification</string>\r
+    <string name="btn_create_noti">Send Notification</string>\r
+    <string name="btn_log">Clear Logs</string>\r
 </resources>\r
diff --git a/service/notification/examples/android/NotiProviderExample/app/src/test/java/com/sec/notiproviderexample/ExampleUnitTest.java b/service/notification/examples/android/NotiProviderExample/app/src/test/java/com/sec/notiproviderexample/ExampleUnitTest.java
deleted file mode 100644 (file)
index f69c509..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.sec.notiproviderexample;\r
-\r
-import org.junit.Test;\r
-\r
-import static org.junit.Assert.*;\r
-\r
-/**\r
- * To work on unit tests, switch the Test Artifact in the Build Variants view.\r
- */\r
-public class ExampleUnitTest {\r
-    @Test\r
-    public void addition_isCorrect() throws Exception {\r
-        assertEquals(4, 2 + 2);\r
-    }\r
-}
\ No newline at end of file
diff --git a/service/notification/examples/android/NotiProviderExample/iotivity-armeabi-notification-service-debug/build.gradle b/service/notification/examples/android/NotiProviderExample/iotivity-armeabi-notification-service-debug/build.gradle
deleted file mode 100644 (file)
index 3fbdd9f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-configurations.create("default")
-artifacts.add("default", file('iotivity-armeabi-notification-service-debug.aar'))
\ No newline at end of file
diff --git a/service/notification/examples/android/NotiProviderExample/iotivity-base-armeabi-debug/build.gradle b/service/notification/examples/android/NotiProviderExample/iotivity-base-armeabi-debug/build.gradle
deleted file mode 100644 (file)
index 305a7ec..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-configurations.create("default")
-artifacts.add("default", file('iotivity-base-armeabi-debug.aar'))
\ No newline at end of file
index 89a5a42..9ec10a5 100644 (file)
@@ -251,17 +251,20 @@ int main()
                 printf("app - topic : %s \n", topic);
 
                 NSMessage * msg = NSCreateMessage();
+                if(msg)
+                {
 
-                msg->title = OICStrdup(title);
-                msg->contentText = OICStrdup(body);
-                msg->sourceName = OICStrdup("OCF");
+                    msg->title = OICStrdup(title);
+                    msg->contentText = OICStrdup(body);
+                    msg->sourceName = OICStrdup("OCF");
 
-                if(topic[0] != '\0')
-                {
-                    msg->topic = OICStrdup(topic);
-                }
+                    if(topic[0] != '\0')
+                    {
+                        msg->topic = OICStrdup(topic);
+                    }
 
-                NSSendMessage(msg);
+                    NSSendMessage(msg);
+                }
             }
                 break;
 
index 38cca0a..12c6f05 100644 (file)
 #define RESOURCE_TAG               "NS_PROVIDER_RESOURCE"
 #define TOPIC_TAG                  "NS_PROVIDER_TOPIC"
 
-#define NS_ROOT_TYPE               "oic.r.notification"
-#define NS_COLLECTION_MESSAGE_TYPE "oic.r.notification.message"
-#define NS_COLLECTION_SYNC_TYPE    "oic.r.notification.sync"
-#define NS_COLLECTION_TOPIC_TYPE   "oic.r.notification.topic"
+#define NS_ROOT_TYPE               "oic.wk.notification"
+#define NS_COLLECTION_MESSAGE_TYPE "oic.wk.notification.message"
+#define NS_COLLECTION_SYNC_TYPE    "oic.wk.notification.sync"
+#define NS_COLLECTION_TOPIC_TYPE   "oic.wk.notification.topic"
 
+#define NS_INTERFACE_READ          "oic.if.r"
+#define NS_INTERFACE_READWRITE     "oic.if.rw"
 #define NS_DEFAULT_INTERFACE       "oic.if.baseline"
 
 #define NS_ROOT_URI                "/notification"
@@ -89,8 +91,8 @@
 #define NS_QUERY_SEPARATOR         "&;"
 #define NS_KEY_VALUE_DELIMITER     "="
 
-#define NS_QUERY_CONSUMER_ID       "consumerid"
-#define NS_QUERY_PROVIDER_ID       "providerid"
+#define NS_QUERY_CONSUMER_ID       "consumerId"
+#define NS_QUERY_PROVIDER_ID       "providerId"
 
 #define NS_QUERY_ID_SIZE           10
 
 
 #define VERSION        "1.2.0"
 
-#define NS_ATTRIBUTE_VERSION "VERSION"
-#define NS_ATTRIBUTE_POLICY "ACCEPTER"
-#define NS_ATTRIBUTE_MESSAGE "MESSAGE_URI"
-#define NS_ATTRIBUTE_SYNC "SYNC_URI"
-#define NS_ATTRIBUTE_TOPIC "TOPIC_URI"
-#define NS_ATTRIBUTE_MESSAGE_ID "MESSAGE_ID"
-#define NS_ATTRIBUTE_PROVIDER_ID "PROVIDER_ID"
-#define NS_ATTRIBUTE_CONSUMER_ID "CONSUMER_ID"
-#define NS_ATTRIBUTE_TOPIC_LIST "TOPIC_LIST"
-#define NS_ATTRIBUTE_TOPIC_NAME "TOPIC_NAME"
-#define NS_ATTRIBUTE_TOPIC_SELECTION "TOPIC_STATE"
-#define NS_ATTRIBUTE_TITLE "TITLE"
-#define NS_ATTRIBUTE_TEXT "CONTENTTEXT"
-#define NS_ATTRIBUTE_SOURCE "SOURCE"
-#define NS_ATTRIBUTE_STATE "STATE"
-#define NS_ATTRIBUTE_DEVICE "DEVICE"
-#define NS_ATTRIBUTE_TYPE "TYPE"
-#define NS_ATTRIBUTE_DATETIME "DATE_TIME"
-#define NS_ATTRIBUTE_TTL "TTL"
-#define NS_ATTRIBUTE_ICON_IMAGE "ICON_IMAGE"
+#define NS_ATTRIBUTE_VERSION "version"
+#define NS_ATTRIBUTE_POLICY "subControllability"
+#define NS_ATTRIBUTE_MESSAGE "messageUri"
+#define NS_ATTRIBUTE_SYNC "syncUri"
+#define NS_ATTRIBUTE_TOPIC "topicUri"
+#define NS_ATTRIBUTE_MESSAGE_ID "messageId"
+#define NS_ATTRIBUTE_PROVIDER_ID "providerId"
+#define NS_ATTRIBUTE_CONSUMER_ID "consumerId"
+#define NS_ATTRIBUTE_TOPIC_LIST "topicList"
+#define NS_ATTRIBUTE_TOPIC_NAME "topicName"
+#define NS_ATTRIBUTE_TOPIC_SELECTION "topicState"
+#define NS_ATTRIBUTE_TITLE "title"
+#define NS_ATTRIBUTE_TEXT "contentText"
+#define NS_ATTRIBUTE_SOURCE "source"
+#define NS_ATTRIBUTE_STATE "state"
+#define NS_ATTRIBUTE_DEVICE "device"
+#define NS_ATTRIBUTE_TYPE "type"
+#define NS_ATTRIBUTE_DATETIME "dateTime"
+#define NS_ATTRIBUTE_TTL "ttl"
+#define NS_ATTRIBUTE_ICON_IMAGE "iconImage"
 
 typedef enum eConnectionState
 {
@@ -269,8 +271,8 @@ typedef enum eTaskType
     TASK_CB_SYNC = 10001,
 
     TASK_SEND_TOPICS = 11000,
-    TASK_ADD_TOPIC = 11001,
-    TASK_DELETE_TOPIC = 11002,
+    TASK_REGISTER_TOPIC = 11001,
+    TASK_UNREGISTER_TOPIC = 11002,
     TASK_SUBSCRIBE_TOPIC = 11003,
     TASK_UNSUBSCRIBE_TOPIC = 11004,
     TASK_POST_TOPIC = 11005,
diff --git a/service/notification/src/common/NSStorageAdapter.h b/service/notification/src/common/NSStorageAdapter.h
deleted file mode 100644 (file)
index 27aff40..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-//******************************************************************\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_STORAGEADAPTER__H_\r
-#define _NS_STORAGEADAPTER__H_\r
-\r
-#include "logger.h"\r
-#include <octypes.h>\r
-#include <stdbool.h>\r
-#include "ocstack.h"\r
-#include "ocpayload.h"\r
-#include "NSStructs.h"\r
-#include "NSConstants.h"\r
-\r
-NSCacheList * NSStorageCreate();\r
-NSCacheElement * NSStorageRead(NSCacheList * list, const char * findId);\r
-NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj);\r
-NSResult NSStorageDelete(NSCacheList * list, const char * delId);\r
-NSResult NSStorageDestroy(NSCacheList * list);\r
-\r
-#endif /* _NS_STORAGEADAPTER__H_ */\r
index 24ce822..14ca14b 100755 (executable)
@@ -114,6 +114,7 @@ NSMessage * NSDuplicateMessage(NSMessage * copyMsg)
     }
 
     newMsg = NSInitializeMessage();
+    NS_VERIFY_NOT_NULL(newMsg, NULL);
 
     newMsg->messageId = copyMsg->messageId;
     OICStrcpy(newMsg->providerId, UUID_STRING_SIZE, copyMsg->providerId);
@@ -273,7 +274,8 @@ NSSyncInfo * NSGetSyncInfo(OCPayload * payload)
     retSync->state = NS_SYNC_READ;
 
     OCRepPayload * repPayload = (OCRepPayload *)payload;
-    if (!OCRepPayloadGetPropInt(repPayload, NS_ATTRIBUTE_MESSAGE_ID, (int64_t *)&retSync->messageId))
+    if (!OCRepPayloadGetPropInt(repPayload, NS_ATTRIBUTE_MESSAGE_ID,
+            (int64_t *)&retSync->messageId))
     {
         OICFree(retSync);
         return NULL;
index d00895a..e7940ba 100644 (file)
 #include "NSThread.h"
 #include "oic_malloc.h"
 #include "oic_string.h"
+#include "ocpayload.h"
 
 #include <pthread.h>
 
-#define NS_QUERY_CONSUMER_ID "consumerid"
+#define NS_QUERY_CONSUMER_ID "consumerId"
 
 pthread_mutex_t ** NSGetStackMutex()
 {
@@ -255,11 +256,14 @@ NSMessage * NSCopyMessage(NSMessage * msg)
     newMsg->sourceName = OICStrdup(msg->sourceName);
     newMsg->dateTime = OICStrdup(msg->dateTime);
     newMsg->type = msg->type;
+
     newMsg->topic = NULL;
     if (msg->topic && strlen(msg->topic) > 0)
     {
         newMsg->topic = OICStrdup(msg->topic);
     }
+
+    newMsg->mediaContents = NULL;
     if (msg->mediaContents)
     {
         newMsg->mediaContents = (NSMediaContents *)OICMalloc(sizeof(NSMediaContents));
@@ -273,6 +277,12 @@ NSMessage * NSCopyMessage(NSMessage * msg)
                strlen(msg->mediaContents->iconImage));
     }
 
+    newMsg->extraInfo = NULL;
+    if (msg->extraInfo)
+    {
+        newMsg->extraInfo = OCRepPayloadClone(msg->extraInfo);
+    }
+
     return newMsg;
 }
 void NSRemoveMessage(NSMessage * msg)
@@ -292,6 +302,12 @@ void NSRemoveMessage(NSMessage * msg)
     }
     NSOICFree(msg->mediaContents);
 
+    if (msg->extraInfo)
+    {
+        OCRepPayloadDestroy(msg->extraInfo);
+        msg->extraInfo = NULL;
+    }
+
     NSOICFree(msg);
 }
 
index 417e6a0..5b5dc87 100644 (file)
@@ -33,13 +33,12 @@ extern "C" {
 #include "ocstack.h"
 
 #define NS_QOS OC_HIGH_QOS
-#define NS_RESOURCE_TYPE "oic.r.notification"
+#define NS_RESOURCE_TYPE "oic.wk.notification"
 #define NS_RESOURCE_URI "/notification"
 #define NS_INTERFACE_BASELINE "oic.if.baseline"
-#define NS_INTERFACE_NOTIFICATION "oic.if.notification"
 #define NS_RESOURCE_QUERY "/oic/res"
 
-#define NS_DISCOVER_QUERY "/oic/res?rt=oic.r.notification"
+#define NS_DISCOVER_QUERY "/oic/res?rt=oic.wk.notification"
 #define NS_DEVICE_ID_LENGTH 37
 
 typedef enum
index 2c0da66..0554a01 100644 (file)
@@ -219,6 +219,159 @@ void NSGetMessagePostClean(char * pId, OCDevAddr * addr)
     NSOICFree(addr);
 }
 
+bool NSIsExtraValue(const char * name)
+{
+    if (!strcmp(name, NS_ATTRIBUTE_MESSAGE_ID) ||
+        !strcmp(name, NS_ATTRIBUTE_PROVIDER_ID) ||
+        !strcmp(name, NS_ATTRIBUTE_TITLE) ||
+        !strcmp(name, NS_ATTRIBUTE_TEXT) ||
+        !strcmp(name, NS_ATTRIBUTE_SOURCE) ||
+        !strcmp(name, NS_ATTRIBUTE_TOPIC_NAME) ||
+        !strcmp(name, NS_ATTRIBUTE_TYPE) ||
+        !strcmp(name, NS_ATTRIBUTE_DATETIME) ||
+        !strcmp(name, NS_ATTRIBUTE_TTL) ||
+        !strcmp(name, NS_ATTRIBUTE_ICON_IMAGE))
+    {
+        return false;
+    }
+
+    return true;
+}
+
+void NSCopyPayloadValueArray(OCRepPayloadValue* dest, OCRepPayloadValue* source)
+{
+    NS_VERIFY_NOT_NULL_V(source);
+
+    size_t dimTotal = calcDimTotal(source->arr.dimensions);
+    switch(source->arr.type)
+    {
+        case OCREP_PROP_INT:
+            dest->arr.iArray = (int64_t*)OICMalloc(dimTotal * sizeof(int64_t));
+            NS_VERIFY_NOT_NULL_V(dest->arr.iArray);
+            memcpy(dest->arr.iArray, source->arr.iArray, dimTotal * sizeof(int64_t));
+            break;
+        case OCREP_PROP_DOUBLE:
+            dest->arr.dArray = (double*)OICMalloc(dimTotal * sizeof(double));
+            NS_VERIFY_NOT_NULL_V(dest->arr.dArray);
+            memcpy(dest->arr.dArray, source->arr.dArray, dimTotal * sizeof(double));
+            break;
+        case OCREP_PROP_BOOL:
+            dest->arr.bArray = (bool*)OICMalloc(dimTotal * sizeof(bool));
+            NS_VERIFY_NOT_NULL_V(dest->arr.bArray);
+            memcpy(dest->arr.bArray, source->arr.bArray, dimTotal * sizeof(bool));
+            break;
+        case OCREP_PROP_STRING:
+            dest->arr.strArray = (char**)OICMalloc(dimTotal * sizeof(char*));
+            NS_VERIFY_NOT_NULL_V(dest->arr.strArray);
+            for(size_t i = 0; i < dimTotal; ++i)
+            {
+                dest->arr.strArray[i] = OICStrdup(source->arr.strArray[i]);
+            }
+            break;
+        case OCREP_PROP_OBJECT:
+            dest->arr.objArray = (OCRepPayload**)OICMalloc(dimTotal * sizeof(OCRepPayload*));
+            NS_VERIFY_NOT_NULL_V(dest->arr.objArray);
+            for(size_t i = 0; i < dimTotal; ++i)
+            {
+                dest->arr.objArray[i] = OCRepPayloadClone(source->arr.objArray[i]);
+            }
+            break;
+        case OCREP_PROP_ARRAY:
+            dest->arr.objArray = (OCRepPayload**)OICMalloc(dimTotal * sizeof(OCRepPayload*));
+            NS_VERIFY_NOT_NULL_V(dest->arr.objArray);
+            for(size_t i = 0; i < dimTotal; ++i)
+            {
+                dest->arr.objArray[i] = OCRepPayloadClone(source->arr.objArray[i]);
+            }
+            break;
+        case OCREP_PROP_BYTE_STRING:
+            dest->arr.ocByteStrArray = (OCByteString*)OICMalloc(dimTotal * sizeof(OCByteString));
+            NS_VERIFY_NOT_NULL_V(dest->arr.ocByteStrArray);
+            for (size_t i = 0; i < dimTotal; ++i)
+            {
+                OCByteStringCopy(&dest->arr.ocByteStrArray[i], &source->arr.ocByteStrArray[i]);
+                NS_VERIFY_NOT_NULL_V(dest->arr.ocByteStrArray[i].bytes);
+            }
+            break;
+        default:
+            break;
+    }
+}
+
+OCRepPayloadValue * NSCopyPayloadValue(OCRepPayloadValue * value)
+{
+    OCRepPayloadValue * retValue = (OCRepPayloadValue *)OICMalloc(sizeof(OCRepPayloadValue));
+    NS_VERIFY_NOT_NULL(retValue, NULL);
+
+    * retValue = * value;
+    retValue->next = NULL;
+    retValue->name = OICStrdup(value->name);
+
+    switch(value->type)
+    {
+        case OCREP_PROP_STRING:
+            retValue->str = OICStrdup(value->str);
+            break;
+        case OCREP_PROP_BYTE_STRING:
+            retValue->ocByteStr.bytes = (uint8_t * )OICMalloc(value->ocByteStr.len * sizeof(uint8_t));
+            NS_VERIFY_NOT_NULL(retValue->ocByteStr.bytes, NULL);
+            retValue->ocByteStr.len = value->ocByteStr.len;
+            memcpy(retValue->ocByteStr.bytes, value->ocByteStr.bytes, retValue->ocByteStr.len);
+            break;
+        case OCREP_PROP_OBJECT:
+            retValue->obj = OCRepPayloadClone(value->obj);
+            break;
+        case OCREP_PROP_ARRAY:
+            NSCopyPayloadValueArray(retValue, value);
+            break;
+        default:
+            break;
+    }
+
+    return retValue;
+}
+
+OCRepPayload * NSGetExtraInfo(OCRepPayload * payload)
+{
+    NS_LOG(DEBUG, "get extra info");
+    OCRepPayload * extraInfo = OCRepPayloadCreate();
+    OCRepPayload * origin = OCRepPayloadClone(payload);
+
+    bool isFirstExtra = true;
+    OCRepPayloadValue * headValue = NULL;
+    OCRepPayloadValue * curValue = NULL;
+    OCRepPayloadValue * value = origin->values;
+    while(value)
+    {
+        if (NSIsExtraValue(value->name))
+        {
+            curValue = NSCopyPayloadValue(value);
+            NS_LOG_V(DEBUG, " key : %s", curValue->name);
+            if (isFirstExtra)
+            {
+                headValue = curValue;
+                isFirstExtra = false;
+            }
+            curValue = curValue->next;
+            curValue = NULL;
+        }
+        value = value->next;
+    }
+    OCRepPayloadDestroy(origin);
+
+    extraInfo->values = headValue;
+
+    if (extraInfo->values)
+    {
+        return extraInfo;
+    }
+    else
+    {
+        OCRepPayloadDestroy(extraInfo);
+        return NULL;
+    }
+}
+
 NSMessage * NSGetMessage(OCClientResponse * clientResponse)
 {
     NS_VERIFY_NOT_NULL(clientResponse->payload, NULL);
@@ -267,6 +420,8 @@ NSMessage * NSGetMessage(OCClientResponse * clientResponse)
         }
     }
 
+    retMsg->extraInfo = NSGetExtraInfo(payload);
+
     NS_LOG_V(DEBUG, "Msg ID      : %lld", (long long int)retMsg->messageId);
     NS_LOG_V(DEBUG, "Msg Title   : %s", retMsg->title);
     NS_LOG_V(DEBUG, "Msg Content : %s", retMsg->contentText);
@@ -326,6 +481,7 @@ NSMessage * NSCreateMessage_internal(uint64_t id, const char * providerId)
     retMsg->dateTime = NULL;
     retMsg->ttl = 0;
     retMsg->mediaContents = NULL;
+    retMsg->extraInfo = NULL;
 
     return retMsg;
 }
@@ -573,14 +729,13 @@ NSTopicLL * NSGetTopicLL(OCClientResponse * clientResponse)
     NS_VERIFY_NOT_NULL(clientResponse->payload, NULL);
 
     OCRepPayload * payload = (OCRepPayload *)clientResponse->payload;
-    while (payload)
+    OCRepPayloadValue * value = payload->values;
+    while (value)
     {
-        NS_LOG_V(DEBUG, "Payload Key : %s", payload->values->name);
-        payload = payload->next;
+        NS_LOG_V(DEBUG, "Payload Key : %s", value->name);
+        value = value->next;
     }
 
-    payload = (OCRepPayload *)clientResponse->payload;
-
     char * consumerId = NULL;
     OCRepPayload ** topicLLPayload = NULL;
 
index a812d34..d0d3f3f 100644 (file)
@@ -28,9 +28,8 @@
 #include "oic_malloc.h"
 #include "oic_string.h"
 
-#define NS_DISCOVER_QUERY "/oic/res?rt=oic.r.notification"
-#define NS_PRESENCE_SUBSCRIBE_QUERY_TCP "/oic/ad?rt=oic.r.notification"
-#define NS_GET_INFORMATION_QUERY "/notification?if=oic.if.notification"
+#define NS_DISCOVER_QUERY "/oic/res?rt=oic.wk.notification"
+#define NS_PRESENCE_SUBSCRIBE_QUERY_TCP "/oic/ad?rt=oic.wk.notification"
 
 NSProvider_internal * NSGetProvider(OCClientResponse * clientResponse);
 
@@ -200,19 +199,18 @@ NSProvider_internal * NSGetProvider(OCClientResponse * clientResponse)
     OCRepPayloadPropType accepterType = OCREP_PROP_BOOL;
 
     OCRepPayload * payload = (OCRepPayload *)clientResponse->payload;
-    while (payload)
+    OCRepPayloadValue * value = payload->values;
+    while (value)
     {
-        NS_LOG_V(DEBUG, "Payload Key : %s", payload->values->name);
-        NS_LOG_V(DEBUG, "Payload Type : %d", (int) payload->values->type);
-        if (!strcmp(payload->values->name, NS_ATTRIBUTE_POLICY))
+        NS_LOG_V(DEBUG, "Payload Key : %s", value->name);
+        NS_LOG_V(DEBUG, "Payload Type : %d", (int) value->type);
+        if (!strcmp(value->name, NS_ATTRIBUTE_POLICY))
         {
-            accepterType = payload->values->type;
+            accepterType = value->type;
         }
-        payload = payload->next;
+        value = value->next;
     }
 
-    payload = (OCRepPayload *)clientResponse->payload;
-
     char * providerId = NULL;
     char * messageUri = NULL;
     char * syncUri = NULL;
index b069742..0775637 100644 (file)
@@ -73,7 +73,7 @@ void NSDestroyInternalCachedList()
     NSCacheList * cache = *(NSGetProviderCacheList());
     if (cache)
     {
-        NSStorageDestroy(cache);
+        NSConsumerStorageDestroy(cache);
     }
 
     NSSetProviderCacheList(NULL);
@@ -91,14 +91,14 @@ NSProvider_internal * NSProviderCacheFind(const char * providerId)
     if (!ProviderCache)
     {
         NS_LOG(DEBUG, "Provider Cache Init");
-        ProviderCache = NSStorageCreate();
+        ProviderCache = NSConsumerStorageCreate();
         NS_VERIFY_NOT_NULL(ProviderCache, NULL);
 
         ProviderCache->cacheType = NS_CONSUMER_CACHE_PROVIDER;
         NSSetProviderCacheList(ProviderCache);
     }
 
-    NSCacheElement * cacheElement = NSStorageRead(ProviderCache, providerId);
+    NSCacheElement * cacheElement = NSConsumerStorageRead(ProviderCache, providerId);
     NS_VERIFY_NOT_NULL(cacheElement, NULL);
 
     return NSCopyProvider_internal((NSProvider_internal *) cacheElement->data);
@@ -129,7 +129,7 @@ NSResult NSProviderCacheUpdate(NSProvider_internal * provider)
     if (!ProviderCache)
     {
         NS_LOG(DEBUG, "Provider Cache Init");
-        ProviderCache = NSStorageCreate();
+        ProviderCache = NSConsumerStorageCreate();
         NS_VERIFY_NOT_NULL(ProviderCache, NS_ERROR);
 
         ProviderCache->cacheType = NS_CONSUMER_CACHE_PROVIDER;
@@ -145,7 +145,7 @@ NSResult NSProviderCacheUpdate(NSProvider_internal * provider)
     obj->next = NULL;
 
     NS_LOG(DEBUG, "try to write to storage");
-    NSResult ret = NSStorageWrite(ProviderCache, obj);
+    NSResult ret = NSConsumerStorageWrite(ProviderCache, obj);
     NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(ret == NS_OK ? (void *) 1 : NULL,
             NS_ERROR, NSOICFree(obj));
 
@@ -158,7 +158,7 @@ void NSCancelAllSubscription()
     if (!ProviderCache)
     {
         NS_LOG(DEBUG, "Provider Cache Init");
-        ProviderCache = NSStorageCreate();
+        ProviderCache = NSConsumerStorageCreate();
         NS_VERIFY_NOT_NULL_V(ProviderCache);
 
         ProviderCache->cacheType = NS_CONSUMER_CACHE_PROVIDER;
@@ -278,7 +278,7 @@ void NSConsumerHandleProviderDeleted(NSProvider_internal * provider)
     NSCacheList * providerCache = *(NSGetProviderCacheList());
     NS_VERIFY_NOT_NULL_V(providerCache);
 
-    NSResult ret = NSStorageDelete(providerCache, provider->providerId);
+    NSResult ret = NSConsumerStorageDelete(providerCache, provider->providerId);
     NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *)1 : NULL);
 
     NS_LOG_V(DEBUG, "Stopped Provider : %s", provider->providerId);
@@ -292,7 +292,7 @@ void NSConsumerHandleSubscribeSucceed(NSProvider_internal * provider)
 
     NSCacheList * ProviderCache = *(NSGetProviderCacheList());
 
-    NSCacheElement * cacheElement = NSStorageRead(ProviderCache, provider->providerId);
+    NSCacheElement * cacheElement = NSConsumerStorageRead(ProviderCache, provider->providerId);
     NS_VERIFY_NOT_NULL_V(cacheElement);
 
     pthread_mutex_t * mutex = NSGetCacheMutex();
@@ -318,7 +318,7 @@ void NSConsumerHandleRecvProviderChanged(NSMessage * msg)
 
     NSCacheList * ProviderCache = *(NSGetProviderCacheList());
 
-    NSCacheElement * cacheElement = NSStorageRead(ProviderCache, msg->providerId);
+    NSCacheElement * cacheElement = NSConsumerStorageRead(ProviderCache, msg->providerId);
     NS_VERIFY_NOT_NULL_V(cacheElement);
 
     pthread_mutex_t * mutex = NSGetCacheMutex();
index b12265b..4d567e5 100644 (file)
@@ -26,7 +26,6 @@ extern "C" {
 #endif // __cplusplus
 
 #include "NSStructs.h"
-#include "NSStorageAdapter.h"
 #include "NSConsumerMemoryCache.h"
 #include "NSConsumerCommunication.h"
 
index f06f918..5984beb 100644 (file)
@@ -35,7 +35,7 @@ pthread_mutex_t * NSGetCacheMutex()
     return g_NSCacheMutex;
 }
 
-NSCacheList * NSStorageCreate()
+NSCacheList * NSConsumerStorageCreate()
 {
     pthread_mutex_t * mutex = NSGetCacheMutex();
     pthread_mutex_lock(mutex);
@@ -51,7 +51,7 @@ NSCacheList * NSStorageCreate()
     return newList;
 }
 
-NSCacheElement * NSStorageRead(NSCacheList * list, const char * findId)
+NSCacheElement * NSConsumerStorageRead(NSCacheList * list, const char * findId)
 {
     NS_VERIFY_NOT_NULL(list, NULL);
     NS_VERIFY_NOT_NULL(findId, NULL);
@@ -115,7 +115,7 @@ NSCacheElement * NSGetProviderFromAddr(NSCacheList * list, const char * addr, ui
     return NULL;
 }
 
-NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)
+NSResult NSConsumerStorageWrite(NSCacheList * list, NSCacheElement * newObj)
 {
     NS_VERIFY_NOT_NULL(list, NS_ERROR);
     NS_VERIFY_NOT_NULL(newObj, NS_ERROR);
@@ -133,7 +133,7 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)
     return NS_ERROR;
 }
 
-NSResult NSStorageDelete(NSCacheList * list, const char * delId)
+NSResult NSConsumerStorageDelete(NSCacheList * list, const char * delId)
 {
     NS_VERIFY_NOT_NULL(list, NS_ERROR);
     NS_VERIFY_NOT_NULL(delId, NS_ERROR);
@@ -207,7 +207,7 @@ NSResult NSConsumerCacheWriteProvider(NSCacheList * list, NSCacheElement * newOb
 
     NSProvider_internal * newProvObj = (NSProvider_internal *) newObj->data;
 
-    NSCacheElement * it = NSStorageRead(list, newProvObj->providerId);
+    NSCacheElement * it = NSConsumerStorageRead(list, newProvObj->providerId);
 
     pthread_mutex_lock(mutex);
 
@@ -296,7 +296,7 @@ NSCacheElement * NSPopProviderCacheList(NSCacheList * list)
 }
 
 
-NSResult NSStorageDestroy(NSCacheList * list)
+NSResult NSConsumerStorageDestroy(NSCacheList * list)
 {
     NS_VERIFY_NOT_NULL(list, NS_ERROR);
 
index 8d6a608..fc7aaaf 100644 (file)
@@ -28,9 +28,14 @@ extern "C" {
 #include <stdlib.h>
 #include <stdbool.h>
 #include <pthread.h>
-#include "NSStorageAdapter.h"
 #include "NSConsumerCommon.h"
 
+NSCacheList * NSConsumerStorageCreate();
+NSCacheElement * NSConsumerStorageRead(NSCacheList * list, const char * findId);
+NSResult NSConsumerStorageWrite(NSCacheList * list, NSCacheElement * newObj);
+NSResult NSConsumerStorageDelete(NSCacheList * list, const char * delId);
+NSResult NSConsumerStorageDestroy(NSCacheList * list);
+
 pthread_mutex_t * NSGetCacheMutex();
 
 bool NSConsumerCompareIdCacheData(NSCacheType type, void * data, const char * id);
index 82ccd24..c4a2575 100644 (file)
@@ -29,7 +29,7 @@
 #include "NSConsumerDiscovery.h"
 #include "NSConsumerNetworkEventListener.h"
 
-#define NS_PRESENCE_SUBSCRIBE_QUERY "/oic/ad?rt=oic.r.notification"
+#define NS_PRESENCE_SUBSCRIBE_QUERY "/oic/ad?rt=oic.wk.notification"
 
 void NSConnectionStateListener(const CAEndpoint_t * info, bool isConnected);
 
index 1294079..59012d7 100644 (file)
@@ -53,7 +53,7 @@ void NSDestroyQueue(NSConsumerQueue * queue)
     NSOICFree(queue);
 }
 
-bool NSPushQueue(NSConsumerQueue * queue, NSConsumerQueueObject * object)
+bool NSPushConsumerQueue(NSConsumerQueue * queue, NSConsumerQueueObject * object)
 {
     NS_VERIFY_NOT_NULL(queue, false);
     NS_VERIFY_NOT_NULL(object, false);
index 55c9223..4e23761 100644 (file)
@@ -44,7 +44,7 @@ NSConsumerQueue * NSCreateQueue();
 
 void NSDestroyQueue(NSConsumerQueue *);
 
-bool NSPushQueue(NSConsumerQueue *, NSConsumerQueueObject *);
+bool NSPushConsumerQueue(NSConsumerQueue *, NSConsumerQueueObject *);
 
 NSConsumerQueueObject * NSPopQueue(NSConsumerQueue *);
 
index 0b94d1f..13a33bb 100644 (file)
@@ -201,7 +201,7 @@ void * NSConsumerMsgPushThreadFunc(void * data)
     }
     else
     {
-        NSPushQueue(queue, obj);
+        NSPushConsumerQueue(queue, obj);
     }
 
     NSThreadUnlock(msgHandleThread);
index 93d9ab2..a450959 100644 (file)
@@ -23,7 +23,6 @@
 #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
index b2ea382..ea574a9 100644 (file)
@@ -24,7 +24,6 @@
 #include "NSProviderSubscription.h"
 #include "NSProviderNotification.h"
 #include "NSProviderCallbackResponse.h"
-#include "NSStorageAdapter.h"
 #include "NSProviderMemoryCache.h"
 #include "NSProviderTopic.h"
 #include "oic_malloc.h"
@@ -61,9 +60,9 @@ void NSInitialize()
 
 void NSDeinitailize()
 {
-    NSStorageDestroy(consumerSubList);
-    NSStorageDestroy(consumerTopicList);
-    NSStorageDestroy(registeredTopicList);
+    NSProviderStorageDestroy(consumerSubList);
+    NSProviderStorageDestroy(consumerTopicList);
+    NSProviderStorageDestroy(registeredTopicList);
 
     pthread_mutex_destroy(&NSCacheMutex);
     pthread_mutexattr_destroy(&NSCacheMutexAttr);
@@ -198,7 +197,7 @@ NSResult NSSendMessage(NSMessage * msg)
 
     pthread_mutex_lock(&nsInitMutex);
 
-    if(msg == NULL)
+    if (!initProvider || msg == NULL)
     {
         NS_LOG(ERROR, "Msg is NULL");
         pthread_mutex_unlock(&nsInitMutex);
@@ -220,6 +219,14 @@ NSResult NSProviderSendSyncInfo(uint64_t messageId, NSSyncType type)
     pthread_mutex_lock(&nsInitMutex);
 
     NSSyncInfo * syncInfo = (NSSyncInfo *)OICMalloc(sizeof(NSSyncInfo));
+
+    if (!initProvider || !syncInfo)
+    {
+        NS_LOG(ERROR, "Provider is not started");
+        pthread_mutex_unlock(&nsInitMutex);
+        return NS_FAIL;
+    }
+
     OICStrcpy(syncInfo->providerId, UUID_STRING_SIZE, NSGetProviderInfo()->providerId);
     syncInfo->messageId = messageId;
     syncInfo->state = type;
@@ -235,9 +242,9 @@ NSResult NSAcceptSubscription(const char * consumerId, bool accepted)
     NS_LOG(DEBUG, "NSAccept - IN");
     pthread_mutex_lock(&nsInitMutex);
 
-    if(!consumerId || consumerId[0] == '\0' || NSGetPolicy() == NS_POLICY_CONSUMER)
+    if(!initProvider || !consumerId || consumerId[0] == '\0' || NSGetPolicy() == NS_POLICY_CONSUMER)
     {
-        NS_LOG(ERROR, "consumerId is NULL or NS Policy is Consumer");
+        NS_LOG(ERROR, "Provider is not started or consumerId is NULL or NS Policy is Consumer");
         pthread_mutex_unlock(&nsInitMutex);
         return NS_FAIL;
     }
@@ -278,25 +285,26 @@ NSTopicLL * NSProviderGetConsumerTopics(const char * consumerId)
     NS_LOG(DEBUG, "NSProviderGetConsumerTopics - IN");
     pthread_mutex_lock(&nsInitMutex);
 
-    if(!consumerId || consumerId[0] == '\0')
+    if(!initProvider || !consumerId || consumerId[0] == '\0')
     {
-        NS_LOG(DEBUG, "consumer id should be set");
+        NS_LOG(DEBUG, "Provider is not started or consumer id should be set");
         pthread_mutex_unlock(&nsInitMutex);
         return NULL;
     }
 
-    NSTopicSynchronization topics;
-    topics.consumerId = OICStrdup(consumerId);
-    topics.topics = NULL;
-    topics.condition = nstopicCond;
+    NSTopicSync topicSync;
+    topicSync.consumerId = OICStrdup(consumerId);
+    topicSync.topics = NULL;
+    topicSync.condition = &nstopicCond;
+    topicSync.mutex = &nsInitMutex;
 
-    NSPushQueue(TOPIC_SCHEDULER, TAST_GET_CONSUMER_TOPICS, &topics);
-    pthread_cond_wait(&topics.condition, &nsInitMutex);
-    OICFree(topics.consumerId);
+    NSPushQueue(TOPIC_SCHEDULER, TAST_GET_CONSUMER_TOPICS, &topicSync);
+    pthread_cond_wait(topicSync.condition, &nsInitMutex);
+    OICFree(topicSync.consumerId);
 
     pthread_mutex_unlock(&nsInitMutex);
     NS_LOG(DEBUG, "NSProviderGetConsumerTopics - OUT");
-    return topics.topics;
+    return topicSync.topics;
 }
 
 NSTopicLL * NSProviderGetTopics()
@@ -304,17 +312,25 @@ NSTopicLL * NSProviderGetTopics()
     NS_LOG(DEBUG, "NSProviderGetTopics - IN");
     pthread_mutex_lock(&nsInitMutex);
 
-    NSTopicSynchronization topics;
-    topics.consumerId = NULL;
-    topics.topics = NULL;
-    topics.condition = nstopicCond;
+    if (!initProvider)
+    {
+        NS_LOG(ERROR, "Provider is not started");
+        pthread_mutex_unlock(&nsInitMutex);
+        return NULL;
+    }
 
-    NSPushQueue(TOPIC_SCHEDULER, TASK_GET_TOPICS, &topics);
-    pthread_cond_wait(&topics.condition, &nsInitMutex);
+    NSTopicSync topicSync;
+    topicSync.consumerId = NULL;
+    topicSync.topics = NULL;
+    topicSync.condition = &nstopicCond;
+    topicSync.mutex = &nsInitMutex;
+
+    NSPushQueue(TOPIC_SCHEDULER, TASK_GET_TOPICS, &topicSync);
+    pthread_cond_wait(topicSync.condition, &nsInitMutex);
 
     pthread_mutex_unlock(&nsInitMutex);
     NS_LOG(DEBUG, "NSProviderGetTopics - OUT");
-    return topics.topics;
+    return topicSync.topics;
 }
 
 NSResult NSProviderRegisterTopic(const char * topicName)
@@ -322,14 +338,26 @@ NSResult NSProviderRegisterTopic(const char * topicName)
     NS_LOG(DEBUG, "NSProviderAddTopics - IN");
     pthread_mutex_lock(&nsInitMutex);
 
-    if(!topicName || topicName[0] == '\0')
+    if(!initProvider || !topicName || topicName[0] == '\0')
     {
         pthread_mutex_unlock(&nsInitMutex);
-        NS_LOG(DEBUG, "topic Name should be set");
+        NS_LOG(DEBUG, "Provider is not started or topic Name should be set");
         return NS_FAIL;
     }
 
-    NSPushQueue(TOPIC_SCHEDULER, TASK_ADD_TOPIC, OICStrdup(topicName));
+    NSTopicSyncResult topicSyncResult;
+    topicSyncResult.topicName = OICStrdup(topicName);
+    topicSyncResult.condition = &nstopicCond;
+    topicSyncResult.result = NS_OK;
+    topicSyncResult.mutex = &nsInitMutex;
+
+    NSPushQueue(TOPIC_SCHEDULER, TASK_REGISTER_TOPIC, &topicSyncResult);
+    pthread_cond_wait(topicSyncResult.condition, &nsInitMutex);
+    if(topicSyncResult.result != NS_OK)
+    {
+        pthread_mutex_unlock(&nsInitMutex);
+        return NS_FAIL;
+    }
 
     pthread_mutex_unlock(&nsInitMutex);
     NS_LOG(DEBUG, "NSProviderAddTopics - OUT");
@@ -341,14 +369,27 @@ NSResult NSProviderUnregisterTopic(const char * topicName)
     NS_LOG(DEBUG, "NSProviderDeleteTopics - IN");
     pthread_mutex_lock(&nsInitMutex);
 
-    if(!topicName || topicName[0] == '\0')
+    if(!initProvider || !topicName || topicName[0] == '\0')
     {
         pthread_mutex_unlock(&nsInitMutex);
-        NS_LOG(DEBUG, "topic Name should be set");
+        NS_LOG(DEBUG, "Provider is not started or topic Name should be set");
         return NS_FAIL;
     }
 
-    NSPushQueue(TOPIC_SCHEDULER, TASK_DELETE_TOPIC, (void *) topicName);
+    NSTopicSyncResult topicSyncResult;
+    topicSyncResult.topicName = OICStrdup(topicName);
+    topicSyncResult.condition = &nstopicCond;
+    topicSyncResult.result = NS_OK;
+    topicSyncResult.mutex = &nsInitMutex;
+
+    NSPushQueue(TOPIC_SCHEDULER, TASK_UNREGISTER_TOPIC, &topicSyncResult);
+    pthread_cond_wait(topicSyncResult.condition, &nsInitMutex);
+    if(topicSyncResult.result != NS_OK)
+    {
+        pthread_mutex_unlock(&nsInitMutex);
+        return NS_FAIL;
+    }
+    OICFree(topicSyncResult.topicName);
 
     pthread_mutex_unlock(&nsInitMutex);
     NS_LOG(DEBUG, "NSProviderDeleteTopics - OUT");
@@ -360,17 +401,19 @@ NSResult NSProviderSetConsumerTopic(const char * consumerId, const char * topicN
     NS_LOG(DEBUG, "NSProviderSelectTopics - IN");
     pthread_mutex_lock(&nsInitMutex);
 
-    if(!consumerId || consumerId[0] == '\0' || !topicName || topicName[0] == '\0' || !NSGetPolicy())
+    NSCacheTopicSubData * topicSubData =
+            (NSCacheTopicSubData *) OICMalloc(sizeof(NSCacheTopicSubData));
+
+    if(!initProvider || !consumerId || consumerId[0] == '\0' || !topicName || topicName[0] == '\0'
+            || !NSGetPolicy() || !topicSubData)
     {
-        NS_LOG(DEBUG, "consumer id should be set for topic subscription or "
+        NS_LOG(DEBUG, "provider is not started or "
+                "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);
 
@@ -386,17 +429,19 @@ NSResult NSProviderUnsetConsumerTopic(const char * consumerId, const char * topi
     NS_LOG(DEBUG, "NSProviderUnselectTopics - IN");
     pthread_mutex_lock(&nsInitMutex);
 
-    if(!consumerId || consumerId[0] == '\0' || !topicName || topicName[0] == '\0' || !NSGetPolicy())
+    NSCacheTopicSubData * topicSubData =
+            (NSCacheTopicSubData *) OICMalloc(sizeof(NSCacheTopicSubData));
+
+    if(!initProvider || !consumerId || consumerId[0] == '\0' || !topicName || topicName[0] == '\0'
+            || !NSGetPolicy() || !topicSubData)
     {
-        NS_LOG(DEBUG, "consumer id should be set for topic subscription or "
+        NS_LOG(DEBUG, "provider is not started or "
+                "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);
 
index 0c55045..e8b8617 100644 (file)
@@ -33,7 +33,7 @@
 #include "oic_string.h"\r
 #include "oic_malloc.h"\r
 #include "NSUtil.h"\r
-#include "NSStorageAdapter.h"\r
+#include "NSProviderMemoryCache.h"\r
 \r
 OCEntityHandlerResult NSEntityHandlerNotificationCb(OCEntityHandlerFlag flag,\r
         OCEntityHandlerRequest *entityHandlerRequest, void* callback);\r
index 9bf1145..49c2b37 100644 (file)
@@ -21,7 +21,7 @@
 #include "NSProviderMemoryCache.h"\r
 #include <string.h>\r
 \r
-NSCacheList * NSStorageCreate()\r
+NSCacheList * NSProviderStorageCreate()\r
 {\r
     pthread_mutex_lock(&NSCacheMutex);\r
     NSCacheList * newList = (NSCacheList *) OICMalloc(sizeof(NSCacheList));\r
@@ -39,7 +39,7 @@ NSCacheList * NSStorageCreate()
     return newList;\r
 }\r
 \r
-NSCacheElement * NSStorageRead(NSCacheList * list, const char * findId)\r
+NSCacheElement * NSProviderStorageRead(NSCacheList * list, const char * findId)\r
 {\r
     pthread_mutex_lock(&NSCacheMutex);\r
 \r
@@ -85,7 +85,7 @@ NSResult NSCacheUpdateSubScriptionState(NSCacheList * list, char * id, bool stat
         return NS_ERROR;\r
     }\r
 \r
-    NSCacheElement * it = NSStorageRead(list, id);\r
+    NSCacheElement * it = NSProviderStorageRead(list, id);\r
 \r
     if (it)\r
     {\r
@@ -120,7 +120,7 @@ NSResult NSCacheUpdateSubScriptionState(NSCacheList * list, char * id, bool stat
     return NS_ERROR;\r
 }\r
 \r
-NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)\r
+NSResult NSProviderStorageWrite(NSCacheList * list, NSCacheElement * newObj)\r
 {\r
     pthread_mutex_lock(&NSCacheMutex);\r
 \r
@@ -140,7 +140,7 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)
         NS_LOG(DEBUG, "Type is SUBSCRIBER");\r
 \r
         NSCacheSubData * subData = (NSCacheSubData *) newObj->data;\r
-        NSCacheElement * it = NSStorageRead(list, subData->id);\r
+        NSCacheElement * it = NSProviderStorageRead(list, subData->id);\r
 \r
         if (it)\r
         {\r
@@ -198,7 +198,7 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)
         NS_LOG(DEBUG, "Type is REGITSTER TOPIC");\r
 \r
         NSCacheTopicData * topicData = (NSCacheTopicData *) newObj->data;\r
-        NSCacheElement * it = NSStorageRead(list, topicData->topicName);\r
+        NSCacheElement * it = NSProviderStorageRead(list, topicData->topicName);\r
 \r
         if (it)\r
         {\r
@@ -214,7 +214,7 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)
         NS_LOG(DEBUG, "Type is REGITSTER TOPIC");\r
 \r
         NSCacheTopicSubData * topicData = (NSCacheTopicSubData *) newObj->data;\r
-        NSCacheElement * it = NSStorageRead(list, topicData->topicName);\r
+        NSCacheElement * it = NSProviderStorageRead(list, topicData->topicName);\r
 \r
         if (it)\r
         {\r
@@ -230,7 +230,7 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)
         NS_LOG(DEBUG, "Type is REGITSTER TOPIC");\r
 \r
         NSCacheTopicSubData * topicData = (NSCacheTopicSubData *) newObj->data;\r
-        NSCacheElement * it = NSStorageRead(list, topicData->id);\r
+        NSCacheElement * it = NSProviderStorageRead(list, topicData->id);\r
 \r
         if (it)\r
         {\r
@@ -256,7 +256,7 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)
     return NS_OK;\r
 }\r
 \r
-NSResult NSStorageDestroy(NSCacheList * list)\r
+NSResult NSProviderStorageDestroy(NSCacheList * list)\r
 {\r
     NSCacheElement * iter = list->head;\r
     NSCacheElement * next = NULL;\r
@@ -414,7 +414,7 @@ NSResult NSProviderDeleteCacheData(NSCacheType type, void * data)
     return NS_OK;\r
 }\r
 \r
-NSResult NSStorageDelete(NSCacheList * list, const char * delId)\r
+NSResult NSProviderStorageDelete(NSCacheList * list, const char * delId)\r
 {\r
     pthread_mutex_lock(&NSCacheMutex);\r
     NSCacheElement * prev = list->head;\r
@@ -491,6 +491,11 @@ NSTopicLL * NSProviderGetTopicsCacheData(NSCacheList * regTopicList)
     {\r
         NSCacheTopicData * curr = (NSCacheTopicData *) iter->data;\r
         newTopic = (NSTopicLL *) OICMalloc(sizeof(NSTopicLL));\r
+        if(!newTopic)\r
+        {\r
+            pthread_mutex_unlock(&NSCacheMutex);\r
+            return NULL;\r
+        }\r
 \r
         newTopic->state = curr->state;\r
         newTopic->next = NULL;\r
@@ -622,7 +627,8 @@ NSResult NSProviderDeleteConsumerTopic(NSCacheList * conTopicList,
     NS_LOG_V(DEBUG, "curr->id = %s", curr->id);\r
     NS_LOG_V(DEBUG, "curr->topicName = %s", curr->topicName);\r
 \r
-    if( (strncmp(curr->id, cId, NS_UUID_STRING_SIZE) == 0) && (strcmp(curr->topicName, topicName) == 0) )\r
+    if( (strncmp(curr->id, cId, NS_UUID_STRING_SIZE) == 0) &&\r
+            (strcmp(curr->topicName, topicName) == 0) )\r
     {\r
         if (del == conTopicList->head) // first object\r
         {\r
@@ -644,7 +650,8 @@ NSResult NSProviderDeleteConsumerTopic(NSCacheList * conTopicList,
     while (del)\r
     {\r
         curr = (NSCacheTopicSubData *) del->data;\r
-        if( (strncmp(curr->id, cId, NS_UUID_STRING_SIZE) == 0) && (strcmp(curr->topicName, topicName) == 0) )\r
+        if( (strncmp(curr->id, cId, NS_UUID_STRING_SIZE) == 0) &&\r
+                (strcmp(curr->topicName, topicName) == 0) )\r
         {\r
             if (del == conTopicList->tail) // delete object same to last object\r
             {\r
index 8f209fc..df2733d 100644 (file)
 #include "NSStructs.h"\r
 #include "oic_malloc.h"\r
 #include "oic_string.h"\r
-#include "NSStorageAdapter.h"\r
 #include "NSUtil.h"\r
 \r
+NSCacheList * NSProviderStorageCreate();\r
+NSCacheElement * NSProviderStorageRead(NSCacheList * list, const char * findId);\r
+NSResult NSProviderStorageWrite(NSCacheList * list, NSCacheElement * newObj);\r
+NSResult NSProviderStorageDelete(NSCacheList * list, const char * delId);\r
+NSResult NSProviderStorageDestroy(NSCacheList * list);\r
+\r
 NSResult NSProviderDeleteCacheData(NSCacheType, void *);\r
 \r
 bool NSProviderCompareIdCacheData(NSCacheType, void *, const char *);\r
index a61ecc2..dbac395 100644 (file)
@@ -68,7 +68,6 @@ NSResult NSPublishResourceToCloud(char *serverAddress)
 }
 #endif
 
-
 NSResult NSCreateResource(char *uri)
 {
     NS_LOG(DEBUG, "NSCreateResource - IN");
@@ -102,11 +101,19 @@ NSResult NSCreateResource(char *uri)
         }
 
         if (OCCreateResource(&NotificationResource.handle, NS_ROOT_TYPE, NS_DEFAULT_INTERFACE,
-                NS_ROOT_URI, NSEntityHandlerNotificationCb, NULL, resourceProperties) != OC_STACK_OK)
+                NS_ROOT_URI, NSEntityHandlerNotificationCb, NULL,
+                resourceProperties) != OC_STACK_OK)
         {
             NS_LOG(NS_ERROR, "Fail to Create Notification Resource");
             return NS_ERROR;
         }
+
+        if (OCBindResourceInterfaceToResource(NotificationResource.handle, NS_INTERFACE_READ)
+            != OC_STACK_OK)
+        {
+            NS_LOG(NS_ERROR, "Fail to bind Notification Resource Type");
+            return NS_ERROR;
+        }
     }
     else if (strcmp(uri, NS_COLLECTION_MESSAGE_URI) == 0)
     {
@@ -140,6 +147,13 @@ NSResult NSCreateResource(char *uri)
             NS_LOG(NS_ERROR, "Fail to Create Notification Message Resource");
             return NS_ERROR;
         }
+
+        if (OCBindResourceInterfaceToResource(NotificationMessageResource.handle, NS_INTERFACE_READ)
+            != OC_STACK_OK)
+        {
+            NS_LOG(NS_ERROR, "Fail to bind Notification Message Resource Type");
+            return NS_ERROR;
+        }
     }
     else if (strcmp(uri, NS_COLLECTION_SYNC_URI) == 0)
     {
@@ -165,6 +179,14 @@ NSResult NSCreateResource(char *uri)
             NS_LOG(NS_ERROR, "Fail to Create Notification Sync Resource");
             return NS_ERROR;
         }
+
+        if (OCBindResourceInterfaceToResource(NotificationSyncResource.handle,
+                NS_INTERFACE_READWRITE)
+            != OC_STACK_OK)
+        {
+            NS_LOG(NS_ERROR, "Fail to bind Notification Sync Resource Type");
+            return NS_ERROR;
+        }
     }
     else if (strcmp(uri, NS_COLLECTION_TOPIC_URI) == 0)
     {
@@ -190,6 +212,14 @@ NSResult NSCreateResource(char *uri)
             NS_LOG(NS_ERROR, "Fail to Create Notification Sync Resource");
             return NS_ERROR;
         }
+
+        if (OCBindResourceInterfaceToResource(NotificationTopicResource.handle,
+                NS_INTERFACE_READWRITE)
+            != OC_STACK_OK)
+        {
+            NS_LOG(NS_ERROR, "Fail to bind Notification Topic Resource Type");
+            return NS_ERROR;
+        }
     }
     else
     {
index 2fbf554..fb49337 100755 (executable)
@@ -164,20 +164,26 @@ void NSPushQueue(NSSchedulerType schedulerType, NSTaskType taskType, void* data)
     if (NSHeadMsg[schedulerType] == NULL)\r
     {\r
         NSHeadMsg[schedulerType] = (NSTask*) OICMalloc(sizeof(NSTask));\r
-        NSHeadMsg[schedulerType]->taskType = taskType;\r
-        NSHeadMsg[schedulerType]->taskData = data;\r
-        NSHeadMsg[schedulerType]->nextTask = NULL;\r
-        NSTailMsg[schedulerType] = NSHeadMsg[schedulerType];\r
+        if(NSHeadMsg[schedulerType])\r
+        {\r
+            NSHeadMsg[schedulerType]->taskType = taskType;\r
+            NSHeadMsg[schedulerType]->taskData = data;\r
+            NSHeadMsg[schedulerType]->nextTask = NULL;\r
+            NSTailMsg[schedulerType] = NSHeadMsg[schedulerType];\r
+        }\r
     }\r
     else\r
     {\r
         NSTask* newNode = (NSTask*) OICMalloc(sizeof(NSTask));\r
-        newNode->taskType = taskType;\r
-        newNode->taskData = data;\r
-        newNode->nextTask = NULL;\r
+        if(newNode)\r
+        {\r
+            newNode->taskType = taskType;\r
+            newNode->taskData = data;\r
+            newNode->nextTask = NULL;\r
 \r
-        NSTailMsg[schedulerType]->nextTask = newNode;\r
-        NSTailMsg[schedulerType] = newNode;\r
+            NSTailMsg[schedulerType]->nextTask = newNode;\r
+            NSTailMsg[schedulerType] = newNode;\r
+        }\r
     }\r
 \r
     sem_post(&(NSSemaphore[schedulerType]));\r
@@ -274,8 +280,8 @@ void NSFreeData(NSSchedulerType type, NSTask * task)
                 OICFree(data);\r
             }\r
                 break;\r
-            case TASK_ADD_TOPIC:\r
-            case TASK_DELETE_TOPIC:\r
+            case TASK_REGISTER_TOPIC:\r
+            case TASK_UNREGISTER_TOPIC:\r
             {\r
                 OICFree(task->taskData);\r
             }\r
index 3f703f3..c537c61 100644 (file)
@@ -24,7 +24,8 @@ NSResult NSInitSubscriptionList()
 {\r
     NS_LOG(DEBUG, "NSInitSubscriptionList - IN");\r
 \r
-    consumerSubList = NSStorageCreate();\r
+    consumerSubList = NSProviderStorageCreate();\r
+    NS_VERIFY_NOT_NULL(consumerSubList, NS_FAIL);\r
     consumerSubList->cacheType = NS_PROVIDER_CACHE_SUBSCRIBER;\r
 \r
     NS_LOG(DEBUG, "NSInitSubscriptionList - OUT");\r
@@ -159,7 +160,7 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour
         element->data = (void*) subData;\r
         element->next = NULL;\r
 \r
-        if (NSStorageWrite(consumerSubList, element) != NS_OK)\r
+        if (NSProviderStorageWrite(consumerSubList, element) != NS_OK)\r
         {\r
             NS_LOG(DEBUG, "fail to write cache");\r
         }\r
@@ -215,7 +216,7 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour
         element->data = (void*) subData;\r
         element->next = NULL;\r
 \r
-        if (NSStorageWrite(consumerSubList, element) != NS_OK)\r
+        if (NSProviderStorageWrite(consumerSubList, element) != NS_OK)\r
         {\r
             NS_LOG(ERROR, "Fail to write cache");\r
         }\r
@@ -232,7 +233,7 @@ void NSHandleUnsubscription(OCEntityHandlerRequest *entityHandlerRequest)
 \r
     consumerSubList->cacheType = NS_PROVIDER_CACHE_SUBSCRIBER_OBSERVE_ID;\r
 \r
-    while(NSStorageDelete(consumerSubList, (char *)\r
+    while(NSProviderStorageDelete(consumerSubList, (char *)\r
             &(entityHandlerRequest->obsInfo.obsId)) != NS_FAIL);\r
     consumerSubList->cacheType = NS_PROVIDER_CACHE_SUBSCRIBER;\r
 \r
@@ -273,7 +274,7 @@ NSResult NSSendResponse(const char * id, bool accepted)
         : OCRepPayloadSetPropInt(payload, NS_ATTRIBUTE_MESSAGE_ID, NS_DENY);\r
     OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId);\r
 \r
-    NSCacheElement * element = NSStorageRead(consumerSubList, id);\r
+    NSCacheElement * element = NSProviderStorageRead(consumerSubList, id);\r
 \r
     if(element == NULL)\r
     {\r
@@ -282,8 +283,8 @@ NSResult NSSendResponse(const char * id, bool accepted)
     }\r
     NSCacheSubData * subData = (NSCacheSubData*) element->data;\r
 \r
-    if (OCNotifyListOfObservers(rHandle, (OCObservationId*)&subData->messageObId, 1, payload, OC_LOW_QOS)\r
-            != OC_STACK_OK)\r
+    if (OCNotifyListOfObservers(rHandle, (OCObservationId*)&subData->messageObId, 1,\r
+            payload, OC_LOW_QOS) != OC_STACK_OK)\r
     {\r
         NS_LOG(ERROR, "fail to send Acceptance");\r
         OCRepPayloadDestroy(payload);\r
index f17883f..dd11273 100644 (file)
@@ -39,7 +39,8 @@ NSCacheList * consumerSubList;
 NSResult NSInitSubscriptionList();\r
 NSResult NSSetSubscriptionAccessPolicy(bool policy);\r
 NSResult NSSendAccessPolicyResponse(OCEntityHandlerRequest *entityHandlerRequest);\r
-void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResourceType resourceType);\r
+void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest,\r
+        NSResourceType resourceType);\r
 void NSHandleUnsubscription(OCEntityHandlerRequest *entityHandlerRequest);\r
 void NSAskAcceptanceToUser(OCEntityHandlerRequest *entityHandlerRequest);\r
 NSResult NSSendConsumerSubResponse(OCEntityHandlerRequest *entityHandlerRequest);\r
index af54319..e382ddb 100644 (file)
@@ -39,5 +39,6 @@ const char * NSGetUserInfo();
 bool NSGetPolicy();\r
 void NSSetPolicy(bool policy);\r
 bool NSGetResourceSecurity();\r
+void NSSetResourceSecurity(bool secured);\r
 \r
 #endif /* _NS_PROVIDER_SYSTEM__H_ */\r
index 07743cf..e83288e 100644 (file)
@@ -28,10 +28,13 @@ NSResult NSSendTopicUpdation();
 NSResult NSInitTopicList()\r
 {\r
     NS_LOG(DEBUG, "NSInitTopicList - IN");\r
-    consumerTopicList = NSStorageCreate();\r
+\r
+    consumerTopicList = NSProviderStorageCreate();\r
+    NS_VERIFY_NOT_NULL(consumerTopicList, NS_FAIL);\r
     consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME;\r
 \r
-    registeredTopicList = NSStorageCreate();\r
+    registeredTopicList = NSProviderStorageCreate();\r
+    NS_VERIFY_NOT_NULL(registeredTopicList, NS_FAIL);\r
     registeredTopicList->cacheType = NS_PROVIDER_CACHE_REGISTER_TOPIC;\r
 \r
     NS_LOG(DEBUG, "NSInitTopicList - OUT");\r
@@ -40,7 +43,7 @@ NSResult NSInitTopicList()
 \r
 size_t NSProviderGetTopicListSize(NSTopicLL * firstElement)\r
 {\r
-    if(!firstElement)\r
+    if (!firstElement)\r
     {\r
         return 0;\r
     }\r
@@ -49,7 +52,7 @@ size_t NSProviderGetTopicListSize(NSTopicLL * firstElement)
 \r
     NSTopicLL * iter = firstElement;\r
 \r
-    while(iter)\r
+    while (iter)\r
     {\r
         cnt++;\r
         iter = iter->next;\r
@@ -58,22 +61,29 @@ size_t NSProviderGetTopicListSize(NSTopicLL * firstElement)
     return cnt;\r
 }\r
 \r
-NSResult NSAddTopics(const char * topicName)\r
+NSResult NSRegisterTopic(const char * topicName)\r
 {\r
     NS_LOG(DEBUG, "NSWriteTopicsToStorage()");\r
 \r
-    NSCacheTopicData * data = (NSCacheTopicData *)OICMalloc(sizeof(NSCacheTopicData));\r
-    data->topicName = (char *)topicName;\r
+    NSCacheTopicData * data = (NSCacheTopicData *) OICMalloc(sizeof(NSCacheTopicData));\r
+    NS_VERIFY_NOT_NULL(data, NS_FAIL);\r
+    data->topicName = (char *) topicName;\r
     data->state = NS_TOPIC_UNSUBSCRIBED;\r
 \r
     NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
+    if (!element)\r
+    {\r
+        OICFree(data->topicName);\r
+        OICFree(data);\r
+        return NS_FAIL;\r
+    }\r
     element->data = (void *) data;\r
     element->next = NULL;\r
 \r
-    if(NSStorageWrite(registeredTopicList, element) != NS_OK)\r
+    if(NSProviderStorageWrite(registeredTopicList, element) != NS_OK)\r
     {\r
         NS_LOG(DEBUG, "fail to write cache");\r
-        return NS_ERROR;\r
+        return NS_FAIL;\r
     }\r
     NSSendTopicUpdation();\r
 \r
@@ -81,19 +91,28 @@ NSResult NSAddTopics(const char * topicName)
     return NS_OK;\r
 }\r
 \r
-NSResult NSDeleteTopics(const char * topicName)\r
+NSResult NSUnregisterTopic(const char * topicName)\r
 {\r
     NS_LOG(DEBUG, "NSDeleteTopics()");\r
+    NSResult result = NS_OK;\r
 \r
-    if(!topicName)\r
+    if (!topicName)\r
     {\r
         NS_LOG(ERROR, "topicName is NULL");\r
         return NS_ERROR;\r
     }\r
 \r
-    NSStorageDelete(registeredTopicList, topicName);\r
-    while(NSStorageDelete(consumerTopicList, topicName) != NS_FAIL);\r
-    return NS_OK;\r
+    result = NSProviderStorageDelete(registeredTopicList, topicName);\r
+    while (NSProviderStorageDelete(consumerTopicList, topicName) != NS_FAIL)\r
+    {\r
+    }\r
+\r
+    if (result == NS_OK)\r
+    {\r
+        NSSendTopicUpdation();\r
+    }\r
+\r
+    return result;\r
 }\r
 \r
 NSResult NSSendTopicUpdation()\r
@@ -119,7 +138,8 @@ NSResult NSSendTopicUpdation()
     OCRepPayloadSetPropInt(payload, NS_ATTRIBUTE_MESSAGE_ID, NS_TOPIC);\r
     OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId);\r
 \r
-    OCObservationId obArray[255] = { 0, };\r
+    OCObservationId obArray[255] =\r
+    { 0, };\r
     int obCount = 0;\r
 \r
     NSCacheElement * it = consumerSubList->head;\r
@@ -130,7 +150,7 @@ NSResult NSSendTopicUpdation()
 \r
         if (subData->isWhite)\r
         {\r
-            if(subData->messageObId != 0)\r
+            if (subData->messageObId != 0)\r
             {\r
                 obArray[obCount++] = subData->messageObId;\r
             }\r
@@ -145,14 +165,13 @@ NSResult NSSendTopicUpdation()
         it = it->next;\r
     }\r
 \r
-    if(!obCount)\r
+    if (!obCount)\r
     {\r
         NS_LOG(ERROR, "observer count is zero");\r
         return NS_ERROR;\r
     }\r
 \r
-    if (OCNotifyListOfObservers(rHandle, obArray, obCount, payload, OC_HIGH_QOS)\r
-            != OC_STACK_OK)\r
+    if (OCNotifyListOfObservers(rHandle, obArray, obCount, payload, OC_HIGH_QOS) != OC_STACK_OK)\r
     {\r
         NS_LOG(ERROR, "fail to send topic updation");\r
         OCRepPayloadDestroy(payload);\r
@@ -188,9 +207,9 @@ NSResult NSSendTopicUpdationToConsumer(char *consumerId)
     OCRepPayloadSetPropInt(payload, NS_ATTRIBUTE_MESSAGE_ID, NS_TOPIC);\r
     OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId);\r
 \r
-    NSCacheElement * element = NSStorageRead(consumerSubList, consumerId);\r
+    NSCacheElement * element = NSProviderStorageRead(consumerSubList, consumerId);\r
 \r
-    if(element == NULL)\r
+    if (element == NULL)\r
     {\r
         NS_LOG(ERROR, "element is NULL");\r
         return NS_ERROR;\r
@@ -198,7 +217,7 @@ NSResult NSSendTopicUpdationToConsumer(char *consumerId)
 \r
     NSCacheSubData * subData = (NSCacheSubData*) element->data;\r
 \r
-    if (OCNotifyListOfObservers(rHandle, (OCObservationId*)&subData->messageObId, 1, payload,\r
+    if (OCNotifyListOfObservers(rHandle, (OCObservationId*) &subData->messageObId, 1, payload,\r
             OC_HIGH_QOS) != OC_STACK_OK)\r
     {\r
         NS_LOG(ERROR, "fail to send topic updation");\r
@@ -219,7 +238,7 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest)
     char * id = NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_CONSUMER_ID);\r
     NSTopicLL * topics = NULL;\r
 \r
-    if(!id)\r
+    if (!id)\r
     {\r
         NS_LOG(DEBUG, "Send registered topic list");\r
         topics = NSProviderGetTopicsCacheData(registeredTopicList);\r
@@ -228,7 +247,7 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest)
     {\r
         NS_LOG(DEBUG, "Send subscribed topic list to consumer");\r
         topics = NSProviderGetConsumerTopicsCacheData(registeredTopicList, consumerTopicList, id);\r
-        if(!topics)\r
+        if (!topics)\r
         {\r
             topics = NSProviderGetTopicsCacheData(registeredTopicList);\r
         }\r
@@ -249,21 +268,20 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest)
     }\r
 \r
     OCRepPayloadSetUri(payload, NS_COLLECTION_TOPIC_URI);\r
-    if(id)\r
+    if (id)\r
     {\r
         OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, id);\r
     }\r
-    OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID,\r
-        NSGetProviderInfo()->providerId);\r
+    OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId);\r
 \r
-    if(topics)\r
+    if (topics)\r
     {\r
         NS_LOG(DEBUG, "topicList is NULL");\r
-        size_t dimensionSize = (size_t)NSProviderGetTopicListSize(topics);\r
+        size_t dimensionSize = (size_t) NSProviderGetTopicListSize(topics);\r
 \r
         NS_LOG_V(DEBUG, "dimensionSize = %d", (int)dimensionSize);\r
 \r
-        if(!dimensionSize)\r
+        if (!dimensionSize)\r
         {\r
             return NS_ERROR;\r
         }\r
@@ -271,29 +289,31 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest)
         OCRepPayload** payloadTopicArray = (OCRepPayload **) OICMalloc(\r
                 sizeof(OCRepPayload *) * dimensionSize);\r
 \r
-        size_t dimensions[3] = {dimensionSize, 0, 0};\r
+        size_t dimensions[3] =\r
+        { dimensionSize, 0, 0 };\r
 \r
-        for (int i = 0; i < (int)dimensionSize; i++)\r
+        for (int i = 0; i < (int) dimensionSize; i++)\r
         {\r
             NS_LOG_V(DEBUG, "topicName = %s", topics->topicName);\r
             NS_LOG_V(DEBUG, "topicState = %d",(int) topics->state);\r
 \r
             payloadTopicArray[i] = OCRepPayloadCreate();\r
+            NS_VERIFY_NOT_NULL(payloadTopicArray[i], NS_ERROR);\r
             OCRepPayloadSetPropString(payloadTopicArray[i], NS_ATTRIBUTE_TOPIC_NAME,\r
                     topics->topicName);\r
             OCRepPayloadSetPropInt(payloadTopicArray[i], NS_ATTRIBUTE_TOPIC_SELECTION,\r
-                    (int)topics->state);\r
+                    (int) topics->state);\r
 \r
             topics = topics->next;\r
         }\r
 \r
-\r
         OCRepPayloadSetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST,\r
-                (const OCRepPayload**)(payloadTopicArray), dimensions);\r
+                (const OCRepPayload**) (payloadTopicArray), dimensions);\r
     }\r
     else\r
     {\r
-        size_t dimensions[3] = {0, 0, 0};\r
+        size_t dimensions[3] =\r
+        { 0, 0, 0 };\r
 \r
         OCRepPayloadSetPropObjectArrayAsOwner(payload, NS_ATTRIBUTE_TOPIC_LIST,\r
                 (OCRepPayload **) NULL, dimensions);\r
@@ -324,26 +344,30 @@ NSResult NSPostConsumerTopics(OCEntityHandlerRequest * entityHandlerRequest)
     OCRepPayload * payload = (OCRepPayload *) entityHandlerRequest->payload;\r
     OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, &consumerId);\r
 \r
-    if(!consumerId)\r
+    if (!consumerId)\r
     {\r
         NS_LOG(DEBUG, "Invalid consumer ID");\r
-        return NS_ERROR;\r
+        return NS_FAIL;\r
     }\r
 \r
     NS_LOG_V(DEBUG, "TOPIC consumer ID = %s", consumerId);\r
 \r
     consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID;\r
-    while(NSStorageDelete(consumerTopicList, consumerId) != NS_FAIL);\r
+
+    while (NSProviderStorageDelete(consumerTopicList, consumerId) != NS_FAIL)\r
+    {\r
+    }\r
     consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME;\r
 \r
     OCRepPayload ** topicListPayload = NULL;\r
     OCRepPayloadValue * payloadValue = NULL;\r
     payloadValue = NSPayloadFindValue(payload, NS_ATTRIBUTE_TOPIC_LIST);\r
     size_t dimensionSize = calcDimTotal(payloadValue->arr.dimensions);\r
-    size_t dimensions[3] = {dimensionSize, 0, 0};\r
+    size_t dimensions[3] =\r
+    { dimensionSize, 0, 0 };\r
     OCRepPayloadGetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST, &topicListPayload, dimensions);\r
 \r
-    for(int i = 0; i <(int)dimensionSize; i++)\r
+    for (int i = 0; i < (int) dimensionSize; i++)\r
     {\r
         char * topicName = NULL;\r
         int64_t topicState = 0;\r
@@ -352,19 +376,28 @@ NSResult NSPostConsumerTopics(OCEntityHandlerRequest * entityHandlerRequest)
         OCRepPayloadGetPropInt(topicListPayload[i], NS_ATTRIBUTE_TOPIC_SELECTION, &topicState);\r
         NS_LOG_V(DEBUG, "Topic Name(state):  %s(%d)", topicName, (int)topicState);\r
 \r
-        if(NS_TOPIC_SUBSCRIBED == (NSTopicState)topicState)\r
+        if (NS_TOPIC_SUBSCRIBED == (NSTopicState) topicState)\r
         {\r
-            NSCacheTopicSubData * topicSubData = (NSCacheTopicSubData *)\r
-                    OICMalloc(sizeof(NSCacheTopicSubData));\r
+            NSCacheTopicSubData * topicSubData = (NSCacheTopicSubData *) OICMalloc(\r
+                    sizeof(NSCacheTopicSubData));\r
+            NS_VERIFY_NOT_NULL(topicSubData, NS_FAIL);\r
 \r
             OICStrcpy(topicSubData->id, NS_UUID_STRING_SIZE, consumerId);\r
             topicSubData->topicName = OICStrdup(topicName);\r
 \r
             NSCacheElement * newObj = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
+\r
+            if (!newObj)\r
+            {\r
+                OICFree(topicSubData->topicName);\r
+                OICFree(topicSubData);\r
+                return NS_FAIL;\r
+            }\r
+\r
             newObj->data = (NSCacheData *) topicSubData;\r
             newObj->next = NULL;\r
 \r
-            NSStorageWrite(consumerTopicList, newObj);\r
+            NSProviderStorageWrite(consumerTopicList, newObj);
         }\r
     }\r
     NSSendTopicUpdationToConsumer(consumerId);\r
@@ -401,34 +434,53 @@ void * NSTopicSchedule(void * ptr)
                 {\r
                     NS_LOG(DEBUG, "CASE TASK_SUBSCRIBE_TOPIC : ");\r
                     NSCacheElement * newObj = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
-                    newObj->data = node->taskData;\r
-                    newObj->next = NULL;\r
-                    NSStorageWrite(consumerTopicList, newObj);\r
-                    NSCacheTopicSubData * topicSubData = (NSCacheTopicSubData *) node->taskData;\r
-                    NSSendTopicUpdationToConsumer(topicSubData->id);\r
+                    if (newObj)\r
+                    {\r
+                        newObj->data = node->taskData;\r
+                        newObj->next = NULL;\r
+                        if (NSProviderStorageWrite(consumerTopicList, newObj) == NS_OK)\r
+                        {\r
+                            NSCacheTopicSubData * topicSubData =\r
+                                    (NSCacheTopicSubData *) node->taskData;\r
+                            NSSendTopicUpdationToConsumer(topicSubData->id);\r
+                        }\r
+                    }
                 }\r
                     break;\r
                 case TASK_UNSUBSCRIBE_TOPIC:\r
                 {\r
                     NS_LOG(DEBUG, "CASE TASK_SUBSCRIBE_TOPIC : ");\r
-                    NSProviderDeleteConsumerTopic(consumerTopicList,\r
-                            (NSCacheTopicSubData *) node->taskData);\r
                     NSCacheTopicSubData * topicSubData = (NSCacheTopicSubData *) node->taskData;\r
-                    NSSendTopicUpdationToConsumer(topicSubData->id);\r
+                    if (NSProviderDeleteConsumerTopic(consumerTopicList,\r
+                            (NSCacheTopicSubData *) node->taskData) == NS_OK)\r
+                    {\r
+                        NSSendTopicUpdationToConsumer(topicSubData->id);\r
+                    }\r
                     OICFree(topicSubData->topicName);\r
                     OICFree(topicSubData);\r
                 }\r
                     break;\r
-                case TASK_ADD_TOPIC:\r
+                case TASK_REGISTER_TOPIC:\r
                 {\r
                     NS_LOG(DEBUG, "CASE TASK_ADD_TOPIC : ");\r
-                    NSAddTopics((const char *) node->taskData);\r
+                    NSTopicSyncResult * topicSyncResult = (NSTopicSyncResult *) node->taskData;\r
+\r
+                    pthread_mutex_lock(topicSyncResult->mutex);\r
+                    topicSyncResult->result = NSRegisterTopic(\r
+                            (const char *) topicSyncResult->topicName);\r
+                    pthread_cond_signal(topicSyncResult->condition);\r
+                    pthread_mutex_unlock(topicSyncResult->mutex);\r
                 }\r
                     break;\r
-                case TASK_DELETE_TOPIC:\r
+                case TASK_UNREGISTER_TOPIC:\r
                 {\r
                     NS_LOG(DEBUG, "CASE_TASK_DELETE_TOPIC : ");\r
-                    NSDeleteTopics((const char *) node->taskData);\r
+                    NSTopicSyncResult * topicSyncResult = (NSTopicSyncResult *) node->taskData;\r
+                    pthread_mutex_lock(topicSyncResult->mutex);\r
+                    topicSyncResult->result = NSUnregisterTopic(\r
+                            (const char *) topicSyncResult->topicName);\r
+                    pthread_cond_signal(topicSyncResult->condition);\r
+                    pthread_mutex_unlock(topicSyncResult->mutex);\r
                 }\r
                     break;\r
                 case TASK_POST_TOPIC:\r
@@ -441,20 +493,24 @@ void * NSTopicSchedule(void * ptr)
                 case TASK_GET_TOPICS:\r
                 {\r
                     NS_LOG(DEBUG, "TASK_GET_TOPICS : ");\r
-                    NSTopicSynchronization * topicData = (NSTopicSynchronization *) node->taskData;\r
+                    NSTopicSync * topicSync = (NSTopicSync *) node->taskData;\r
+                    pthread_mutex_lock(topicSync->mutex);\r
                     NSTopicLL * topics = NSProviderGetTopicsCacheData(registeredTopicList);\r
-                    topicData->topics = topics;\r
-                    pthread_cond_signal(&topicData->condition);\r
+                    topicSync->topics = topics;\r
+                    pthread_cond_signal(topicSync->condition);\r
+                    pthread_mutex_unlock(topicSync->mutex);\r
                 }\r
                     break;\r
                 case TAST_GET_CONSUMER_TOPICS:\r
                 {\r
                     NS_LOG(DEBUG, "TASK_GET_CONSUMER_TOPICS : ");\r
-                    NSTopicSynchronization * topicData = (NSTopicSynchronization *) node->taskData;\r
+                    NSTopicSync * topicSync = (NSTopicSync *) node->taskData;\r
+                    pthread_mutex_lock(topicSync->mutex);\r
                     NSTopicLL * topics = NSProviderGetConsumerTopicsCacheData(registeredTopicList,\r
-                                consumerTopicList, topicData->consumerId);\r
-                    topicData->topics = topics;\r
-                    pthread_cond_signal(&topicData->condition);\r
+                            consumerTopicList, topicSync->consumerId);\r
+                    topicSync->topics = topics;\r
+                    pthread_cond_signal(topicSync->condition);\r
+                    pthread_mutex_unlock(topicSync->mutex);\r
                 }\r
                     break;\r
                 default:\r
index e14a8bf..c087a96 100644 (file)
 #include "NSProviderSubscription.h"\r
 \r
 typedef struct {\r
-    pthread_cond_t condition;\r
+    pthread_cond_t * condition;\r
+    pthread_mutex_t * mutex;\r
     char * consumerId;\r
     NSTopicLL * topics;\r
-} NSTopicSynchronization;\r
+} NSTopicSync;\r
+\r
+typedef struct {\r
+    pthread_cond_t * condition;\r
+    pthread_mutex_t * mutex;\r
+    char * topicName;\r
+    NSResult result;\r
+} NSTopicSyncResult;\r
 \r
 NSCacheList * consumerTopicList;\r
 NSCacheList * registeredTopicList;\r
index d6e5d69..02cc94a 100644 (file)
@@ -51,7 +51,7 @@ public:
 
     void findProvider()
     {
-        OC::OCPlatform::findResource("", std::string("/oic/res?rt=oic.r.notification"),
+        OC::OCPlatform::findResource("", std::string("/oic/res?rt=oic.wk.notification"),
                 OCConnectivityType::CT_DEFAULT,
                 std::bind(&NSConsumerSimulator::findResultCallback, this, std::placeholders::_1),
                 OC::QualityOfService::LowQos);
@@ -65,9 +65,9 @@ public:
         }
 
         OC::OCRepresentation rep;
-        rep.setValue("PROVIDER_ID", providerID);
-        rep.setValue("MESSAGE_ID", id);
-        rep.setValue("STATE", type);
+        rep.setValue("providerId", providerID);
+        rep.setValue("messageId", id);
+        rep.setValue("state", type);
 
         m_syncResource->post(rep, OC::QueryParamsMap(), &onPost, OC::QualityOfService::LowQos);
     }
@@ -108,12 +108,12 @@ private:
             std::shared_ptr<OC::OCResource> resource)
     {
         OC::QueryParamsMap map;
-        map.insert(std::pair<std::string,std::string>(std::string("consumerid"),
+        map.insert(std::pair<std::string,std::string>(std::string("consumerId"),
                 std::string("123456789012345678901234567890123456")));
 
         try
         {
-            std::vector<std::string> rts{"oic.r.notification"};
+            std::vector<std::string> rts{"oic.wk.notification"};
 
             m_msgResource
                 = OC::OCPlatform::constructResourceObject(
@@ -153,15 +153,15 @@ private:
             const OC::OCRepresentation &rep , const int & /*eCode*/, const int &,
             std::shared_ptr<OC::OCResource> )
     {
-        if (rep.getUri() == "/notification/message" && rep.hasAttribute("MESSAGE_ID")
-                && rep.getValue<int>("MESSAGE_ID") != 1)
+        if (rep.getUri() == "/notification/message" && rep.hasAttribute("messageId")
+                && rep.getValue<int>("messageId") != 1)
         {
-            m_messageFunc(int(rep.getValue<int>("MESSAGE_ID")),
-                          std::string(rep.getValueToString("TITLE")),
-                          std::string(rep.getValueToString("CONTENT")),
-                          std::string(rep.getValueToString("SOURCE")));
+            m_messageFunc(int(rep.getValue<int>("messageId")),
+                          std::string(rep.getValueToString("title")),
+                          std::string(rep.getValueToString("contentText")),
+                          std::string(rep.getValueToString("source")));
 
-            if(rep.getValue<int>("MESSAGE_ID") == 3)
+            if(rep.getValue<int>("messageId") == 3)
             {
                 m_topicResource->get(OC::QueryParamsMap(),
                         std::bind(&NSConsumerSimulator::onTopicGet, this, std::placeholders::_1,
@@ -171,7 +171,7 @@ private:
         }
         else if (rep.getUri() == "/notification/sync")
         {
-            m_syncFunc(int(rep.getValue<int>("STATE")), int(rep.getValue<int>("ID")));
+            m_syncFunc(int(rep.getValue<int>("state")), int(rep.getValue<int>("messageId")));
         }
     }
 
index 953e58d..6c4fdb3 100644 (file)
@@ -124,11 +124,11 @@ private:
                     std::string syncUri = m_notificationUri + m_syncUri;
                     std::string topicUri = m_notificationUri + m_topicUri;
                     std::string providerId = "123456789012345678901234567890123456";
-                    rep.setValue("ACCEPTER", m_accepter);
-                    rep.setValue("MESSAGE_URI", msgUri);
-                    rep.setValue("SYNC_URI", syncUri);
-                    rep.setValue("TOPIC_URI", topicUri);
-                    rep.setValue("PROVIDER_ID", providerId);
+                    rep.setValue("subControllability", m_accepter);
+                    rep.setValue("messageUri", msgUri);
+                    rep.setValue("syncUri", syncUri);
+                    rep.setValue("topicUri", topicUri);
+                    rep.setValue("providerId", providerId);
                 }
                 else if (type == requestType::NS_SYNC)
                 {
@@ -158,14 +158,14 @@ private:
                         [& topicArr](const NS_TopicState & topicState)
                         {
                             OC::OCRepresentation topic;
-                            topic.setValue("TOPIC_NAME", topicState.first);
-                            topic.setValue("TOPIC_STATE", (int) topicState.second);
+                            topic.setValue("topicName", topicState.first);
+                            topic.setValue("topicState", (int) topicState.second);
                             topicArr.push_back(topic);
                         }
                     );
 
                     rep.setValue<std::vector<OC::OCRepresentation>>
-                        ("TOPIC_LIST", topicArr);
+                        ("topicList", topicArr);
                 }
                 else
                 {
@@ -183,8 +183,8 @@ private:
                     m_syncRep = requests->getResourceRepresentation();
 
                     std::cout << "Receive POST for Sync" << std::endl;
-                    std::cout << "Sync Id : " << m_syncRep.getValueToString("ID") << std::endl;
-                    std::cout << "Sync State : " << m_syncRep.getValueToString("STATE") << std::endl;
+                    std::cout << "provider Id : " << m_syncRep.getValueToString("providerId") << std::endl;
+                    std::cout << "Sync State : " << m_syncRep.getValueToString("state") << std::endl;
 
                     response->setResourceRepresentation(m_syncRep);
 
@@ -196,15 +196,15 @@ private:
                 {
                     auto receivePayload =
                             requests->getResourceRepresentation()
-                            .getValue<std::vector<OC::OCRepresentation>>("TOPIC_LIST");
+                            .getValue<std::vector<OC::OCRepresentation>>("topicList");
 
                     std::for_each (receivePayload.begin(), receivePayload.end(),
                           [this](const OC::OCRepresentation & rep)
                           {
-                              auto tmp = m_allowedTopicList.find(rep.getValueToString("TOPIC_NAME"));
+                              auto tmp = m_allowedTopicList.find(rep.getValueToString("topicName"));
                               if (tmp != m_allowedTopicList.end())
                               {
-                                  tmp->second = (TopicAllowState) rep.getValue<int>("TOPIC_STATE");
+                                  tmp->second = (TopicAllowState) rep.getValue<int>("topicState");
                               }
                           }
                     );
@@ -235,8 +235,8 @@ private:
         {
             OC::OCRepresentation rep;
             std::string providerId = "123456789012345678901234567890123456";
-            rep.setValue<int>("MESSAGE_ID", (int)messageType::NS_ALLOW);
-            rep.setValue("PROVIDER_ID", providerId);
+            rep.setValue<int>("messageId", (int)messageType::NS_ALLOW);
+            rep.setValue("providerId", providerId);
 
             auto response = std::make_shared<OC::OCResourceResponse>();
             response->setRequestHandle(requests->getRequestHandle());
@@ -308,27 +308,27 @@ public:
     void sendRead(const uint64_t & id)
     {
         std::string providerId = "123456789012345678901234567890123456";
-        m_syncRep.setValue<int>("MESSAGE_ID", id);
-        m_syncRep.setValue("STATE", (int)1);
-        m_syncRep.setValue("PROVIDER_ID", providerId);
+        m_syncRep.setValue<int>("messageId", id);
+        m_syncRep.setValue("state", (int)1);
+        m_syncRep.setValue("providerId", providerId);
         OC::OCPlatform::notifyAllObservers(m_syncHandle);
     }
     void sendDismiss(const uint64_t & id)
     {
         std::string providerId = "123456789012345678901234567890123456";
-        m_syncRep.setValue<int>("MESSAGE_ID", id);
-        m_syncRep.setValue("STATE", (int)2);
-        m_syncRep.setValue("PROVIDER_ID", providerId);
+        m_syncRep.setValue<int>("messageId", id);
+        m_syncRep.setValue("state", (int)2);
+        m_syncRep.setValue("providerId", providerId);
         OC::OCPlatform::notifyAllObservers(m_syncHandle);
     }
 
     void setMessage(const uint64_t & id, const std::string & title, const std::string & content)
     {
         std::string providerId = "123456789012345678901234567890123456";
-        m_messageRep.setValue<int>("MESSAGE_ID", id);
-        m_messageRep.setValue("TITLE", title);
-        m_messageRep.setValue("CONTENTTEXT", content);
-        m_messageRep.setValue("PROVIDER_ID", providerId);
+        m_messageRep.setValue<int>("messageId", id);
+        m_messageRep.setValue("title", title);
+        m_messageRep.setValue("contentText", content);
+        m_messageRep.setValue("providerId", providerId);
     }
 
     void setTopics(const NS_TopicList & topics)
@@ -400,7 +400,7 @@ public:
         OC::OCPlatform::startPresence(30);
 
         std::string notificationUri = m_notificationUri;
-        std::string resourceTypeName = "oic.r.topic.notification";
+        std::string resourceTypeName = "oic.wk.notification.topic";
         std::string resourceInterface = OC::DEFAULT_INTERFACE;
 
         uint8_t resourceProperty = OC_OBSERVABLE;
@@ -420,7 +420,7 @@ public:
         }
 
         //resourceProperty |= OC_OBSERVABLE;
-        resourceTypeName = "oic.r.message.notification";
+        resourceTypeName = "oic.wk.notification.message";
         childUri = uri + m_messageUri;
         try
         {
@@ -436,7 +436,7 @@ public:
             std::cout << e.what() << std::endl;
         }
 
-        resourceTypeName = "oic.r.sync.notification";
+        resourceTypeName = "oic.wk.notification.sync";
         childUri = uri + m_syncUri;
         try
         {
@@ -453,7 +453,7 @@ public:
         }
 
         resourceProperty |= OC_DISCOVERABLE;
-        resourceTypeName = "oic.r.notification";
+        resourceTypeName = "oic.wk.notification";
         try
         {
             OC::OCPlatform::registerResource(
index c868273..a4477c6 100755 (executable)
@@ -170,10 +170,10 @@ TEST_F(NotificationProviderTest, StartProviderPositiveWithNSPolicyFalse)
     NSResult ret = NSStartProvider(config);
 
     std::unique_lock< std::mutex > lock{ mutexForCondition };
-    responseCon.wait_for(lock, std::chrono::milliseconds(3000));
+    responseCon.wait_for(lock, g_waitForResponse);
     g_consumerSimul.findProvider();
 
-    responseCon.wait_for(lock, std::chrono::milliseconds(3000));
+    responseCon.wait_for(lock, g_waitForResponse);
     NSStopProvider();
     EXPECT_EQ(ret, NS_OK);
 }
@@ -206,7 +206,7 @@ TEST_F(NotificationProviderTest, ExpectCallbackWhenReceiveSubscribeRequestWithAc
     g_consumerSimul.findProvider();
 
     std::unique_lock< std::mutex > lock{ mutexForCondition };
-    responseCon.wait_for(lock, std::chrono::milliseconds(1000));
+    responseCon.wait_for(lock, g_waitForResponse);
 
     EXPECT_NE((void*)g_consumerID, (void*)NULL);
 }
@@ -228,23 +228,26 @@ TEST_F(NotificationProviderTest, NeverCallNotifyOnConsumerByAcceptIsFalse)
     NSAcceptSubscription(g_consumerID, false);
 
     NSMessage * msg = NSCreateMessage();
-    msgID = (int)msg->messageId;
-    msg->title = g_title;
-    msg->contentText = g_body;
-    msg->sourceName = g_sourceName;
-
-    NSSendMessage(msg);
+    if(msg)
     {
+        msgID = (int)msg->messageId;
+        msg->title = g_title;
+        msg->contentText = g_body;
+        msg->sourceName = g_sourceName;
+        NSSendMessage(msg);
+
         std::unique_lock< std::mutex > lock{ mutexForCondition };
         responseCon.wait_for(lock, g_waitForResponse);
-    }
-
-    std::unique_lock< std::mutex > lock{ mutexForCondition };
-    responseCon.wait_for(lock, std::chrono::milliseconds(1000));
 
-    EXPECT_EQ(expectTrue, true);
+        EXPECT_EQ(expectTrue, true);
 
-    NSAcceptSubscription(g_consumerID, true);
+        NSAcceptSubscription(g_consumerID, true);
+        responseCon.wait_for(lock, g_waitForResponse);
+    }
+    else
+    {
+        EXPECT_EQ(expectTrue, false);
+    }
 }
 
 TEST_F(NotificationProviderTest, ExpectCallNotifyOnConsumerByAcceptIsTrue)
@@ -260,17 +263,18 @@ TEST_F(NotificationProviderTest, ExpectCallNotifyOnConsumerByAcceptIsTrue)
                 }
             });
 
-    NSAcceptSubscription(g_consumerID, true);
-
     NSMessage * msg = NSCreateMessage();
-    msgID = (int)msg->messageId;
-    msg->title = g_title;
-    msg->contentText = g_body;
-    msg->sourceName = g_sourceName;
-    NSSendMessage(msg);
+    if(msg)
+    {
+        msgID = (int)msg->messageId;
+        msg->title = g_title;
+        msg->contentText = g_body;
+        msg->sourceName = g_sourceName;
+        NSSendMessage(msg);
 
-    std::unique_lock< std::mutex > lock{ mutexForCondition };
-    responseCon.wait(lock);
+        std::unique_lock< std::mutex > lock{ mutexForCondition };
+        responseCon.wait(lock);
+    }
 }
 
 TEST_F(NotificationProviderTest, ExpectCallbackSyncOnReadToConsumer)
@@ -287,14 +291,17 @@ TEST_F(NotificationProviderTest, ExpectCallbackSyncOnReadToConsumer)
             });
 
     NSMessage * msg = NSCreateMessage();
-    id = (int)msg->messageId;
-    msg->title = g_title;
-    msg->contentText = g_body;
-    msg->sourceName = g_sourceName;
+    if(msg)
+    {
+        id = (int)msg->messageId;
+        msg->title = g_title;
+        msg->contentText = g_body;
+        msg->sourceName = g_sourceName;
 
-    NSProviderSendSyncInfo(msg->messageId, NS_SYNC_READ);
-    std::unique_lock< std::mutex > lock{ mutexForCondition };
-    responseCon.wait_for(lock, std::chrono::milliseconds(5000));
+        NSProviderSendSyncInfo(msg->messageId, NS_SYNC_READ);
+        std::unique_lock< std::mutex > lock{ mutexForCondition };
+        responseCon.wait(lock);
+    }
 }
 
 TEST_F(NotificationProviderTest, ExpectCallbackSyncOnReadFromConsumer)
@@ -311,16 +318,17 @@ TEST_F(NotificationProviderTest, ExpectCallbackSyncOnReadFromConsumer)
             });
 
     NSMessage * msg = NSCreateMessage();
-    id = (int)msg->messageId;
-    msg->title = g_title;
-    msg->contentText = g_body;
-    msg->sourceName = g_sourceName;
-
-    g_consumerSimul.syncToProvider(type, id, msg->providerId);
-    std::unique_lock< std::mutex > lock{ mutexForCondition };
+    if(msg)
+    {
+        id = (int)msg->messageId;
+        msg->title = g_title;
+        msg->contentText = g_body;
+        msg->sourceName = g_sourceName;
 
-    responseCon.wait(lock);
-    //responseCon.wait_for(lock, std::chrono::milliseconds(3000));
+        g_consumerSimul.syncToProvider(type, id, msg->providerId);
+        std::unique_lock< std::mutex > lock{ mutexForCondition };
+        responseCon.wait(lock);
+    }
 }
 
 TEST_F(NotificationProviderTest, ExpectEqualAddedTopicsAndRegisteredTopics)
@@ -330,9 +338,6 @@ TEST_F(NotificationProviderTest, ExpectEqualAddedTopicsAndRegisteredTopics)
     NSProviderRegisterTopic(str.c_str());
     NSProviderRegisterTopic(str2.c_str());
 
-    std::unique_lock< std::mutex > lock{ mutexForCondition };
-    responseCon.wait_for(lock, std::chrono::milliseconds(500));
-
     bool isSame = true;
     NSTopicLL * topics = NSProviderGetTopics();
 
@@ -352,12 +357,9 @@ TEST_F(NotificationProviderTest, ExpectEqualAddedTopicsAndRegisteredTopics)
         }
     }
 
-    EXPECT_EQ(isSame, true);
-
     NSProviderUnregisterTopic(str.c_str());
     NSProviderUnregisterTopic(str2.c_str());
-
-    responseCon.wait_for(lock, std::chrono::milliseconds(500));
+    EXPECT_EQ(isSame, true);
 }
 
 TEST_F(NotificationProviderTest, ExpectEqualUnregisteredTopicsAndRegisteredTopics)
@@ -368,9 +370,6 @@ TEST_F(NotificationProviderTest, ExpectEqualUnregisteredTopicsAndRegisteredTopic
     NSProviderRegisterTopic(str2.c_str());
     NSProviderUnregisterTopic(str2.c_str());
 
-    std::unique_lock< std::mutex > lock{ mutexForCondition };
-    responseCon.wait_for(lock, std::chrono::milliseconds(500));
-
     bool isSame = true;
     NSTopicLL * topics = NSProviderGetTopics();
 
@@ -389,11 +388,8 @@ TEST_F(NotificationProviderTest, ExpectEqualUnregisteredTopicsAndRegisteredTopic
         }
     }
 
-    EXPECT_EQ(isSame, true);
-
     NSProviderUnregisterTopic(str.c_str());
-
-    responseCon.wait_for(lock, std::chrono::milliseconds(500));
+    EXPECT_EQ(isSame, true);
 }
 
 TEST_F(NotificationProviderTest, ExpectEqualSetConsumerTopicsAndGetConsumerTopics)
@@ -405,7 +401,7 @@ TEST_F(NotificationProviderTest, ExpectEqualSetConsumerTopicsAndGetConsumerTopic
     NSProviderSetConsumerTopic(g_consumerID, str.c_str());
 
     std::unique_lock< std::mutex > lock{ mutexForCondition };
-    responseCon.wait_for(lock, std::chrono::milliseconds(500));
+    responseCon.wait_for(lock, g_waitForResponse);
 
     bool isSame = false;
     NSTopicLL * topics = NSProviderGetConsumerTopics(g_consumerID);
@@ -426,12 +422,9 @@ TEST_F(NotificationProviderTest, ExpectEqualSetConsumerTopicsAndGetConsumerTopic
         }
     }
 
-    EXPECT_EQ(isSame, true);
-
     NSProviderUnregisterTopic(str.c_str());
     NSProviderUnregisterTopic(str2.c_str());
-
-    responseCon.wait_for(lock, std::chrono::milliseconds(500));
+    EXPECT_EQ(isSame, true);
 }
 
 TEST_F(NotificationProviderTest, ExpectEqualUnSetConsumerTopicsAndGetConsumerTopics)
@@ -445,7 +438,7 @@ TEST_F(NotificationProviderTest, ExpectEqualUnSetConsumerTopicsAndGetConsumerTop
     NSProviderUnsetConsumerTopic(g_consumerID, str.c_str());
 
     std::unique_lock< std::mutex > lock{ mutexForCondition };
-    responseCon.wait_for(lock, std::chrono::milliseconds(500));
+    responseCon.wait_for(lock, g_waitForResponse);
 
     bool isSame = false;
     NSTopicLL * topics = NSProviderGetConsumerTopics(g_consumerID);
@@ -466,12 +459,9 @@ TEST_F(NotificationProviderTest, ExpectEqualUnSetConsumerTopicsAndGetConsumerTop
         }
     }
 
-    EXPECT_EQ(isSame, true);
-
     NSProviderUnregisterTopic(str.c_str());
     NSProviderUnregisterTopic(str2.c_str());
-
-    responseCon.wait_for(lock, std::chrono::milliseconds(500));
+    EXPECT_EQ(isSame, true);
 }
 
 TEST_F(NotificationProviderTest, ExpectFailAcceptSubscription)
@@ -561,7 +551,7 @@ TEST_F(NotificationProviderTest, CancelObserves)
     bool ret = g_consumerSimul.cancelObserves();
 
     std::unique_lock< std::mutex > lock{ mutexForCondition };
-    responseCon.wait_for(lock, std::chrono::milliseconds(5000));
+    responseCon.wait_for(lock, std::chrono::milliseconds(3000));
 
     EXPECT_EQ(ret, true);
 }
index 8c26e4d..a0aae39 100644 (file)
@@ -95,5 +95,5 @@ env.AppendTarget('notification_provider_test')
 if env.get('TEST') == '1':
     if target_os == 'linux':
             from tools.scons.RunTest import *
-            #run_test(notification_consumer_test_env, '', 'service/notification/unittest/notification_consumer_test')
+            run_test(notification_consumer_test_env, '', 'service/notification/unittest/notification_consumer_test')
             run_test(notification_provider_test_env, '', 'service/notification/unittest/notification_provider_test')