# 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')
package org.iotivity.service.ns.common;
import android.util.Log;
+import org.iotivity.base.OcRepresentation;
/**
* @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;
{
return mTopic;
}
+
+ public OcRepresentation getExtraInfo()
+ {
+ return mExtraInfo;
+ }
+
public void setSourceName (String sourceName)
{
mSourceName = sourceName;
{
mTopic = topic;
}
+
+ public void setExtraInfo(OCRepresentation extraInfo)
+ {
+ mExtraInfo = extraInfo;
+ }
}
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
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;
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
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
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)
\r
#include "JniNotificationCommon.h"\r
#include <cstddef>\r
+#include "JniUtils.h"\r
\r
static jclass g_cls_NSException = NULL;\r
static jmethodID g_mid_NSException_ctor = NULL;\r
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
\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
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
}\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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
\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
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
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
}\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
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
env->DeleteLocalRef(localProviderState);\r
env->DeleteLocalRef(localTopic);\r
env->DeleteLocalRef(localTopicsList);\r
+ env->DeleteLocalRef(localOcRepresentation);\r
\r
return NSExceptionInit(env);\r
}\r
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
#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;
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;
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();
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);
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;
if (!jSubscriptionListener)
{
LOGE ("Failed to Get jSubscriptionListener");
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+ if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
return ;
}
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 ;
}
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);
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(
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;
}
if (!jSyncListener)
{
LOGE ("Failed to Get jSyncListener");
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+ if (JNI_EDETACHED == envRet) g_jvm_provider->DetachCurrentThread();
return ;
}
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(
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 ;
}
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 ;
}
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(
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;
}
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)
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)
(JNIEnv *env, jobject jObj)
{
LOGD("JNIProviderService: nativeCreateMessage - IN");
- OIC::Service::NSMessage* message =
- 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;
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)
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)
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");
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)
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);
env->DeleteLocalRef(localTopic);
env->DeleteLocalRef(localTopicsList);
env->DeleteLocalRef(localTopicState);
+ env->DeleteLocalRef(localOcRepresentation);
return NSExceptionInit(env);
}
env->DeleteGlobalRef(g_cls_Topic);
env->DeleteGlobalRef(g_cls_TopicsList);
env->DeleteGlobalRef(g_cls_TopicState);
+ env->DeleteGlobalRef(g_cls_OcRepresentation);
}
/*
* 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
* 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);
/*
* 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);
/*
* 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);
/*
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
* @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
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
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
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
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
{\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
\r
#include <string>\r
#include "NSMediaContents.h"\r
+#include "OCRepresentation.h"\r
\r
namespace OIC\r
{\r
* 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
*/\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
std::string m_sourceName;\r
NSMediaContents *m_mediaContents;\r
std::string m_topic;\r
+ OC::OCRepresentation m_extraInfo;\r
\r
};\r
}\r
/**\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
*/\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
/**
* Constructor of NSTopic.
*/
- NSTopic(): m_state(NSTopicState::UNSUBSCRIBED) { }
+ NSTopic(): m_state(NSTopicState::UNSUBSCRIBED)
+ {
+ }
/**
* Constructor of NSTopic.
* @param state - as NSTopicState.
*/
NSTopic(const std::string &topicName, const NSTopicState state)
- : m_topicName(topicName) , m_state(state) {}
+ : m_topicName(topicName) , m_state(state)
+ {
+ }
/**
for (auto it : getTopicsList())
{
if (it->getTopicName().compare(topicName) == 0)
+ {
m_topicsList.remove(it);
+ }
}
}
TOPIC = 3,
STOPPED = 12
};
-
+
/**
* NSProviderSubscribedState of notification service
*/
notification_env.PrependUnique(LIBS = [
'oc_logger',
+ 'oc',
'notification_consumer'
])
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')
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')
*/\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
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
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
NSProvider::~NSProvider()\r
{\r
if (m_topicList != nullptr)\r
+ {\r
delete m_topicList;\r
+ }\r
}\r
\r
std::string NSProvider::getProviderId() const\r
{\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
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
void NSProvider::setTopicList(NSTopicsList *topicsList)\r
{\r
if (m_topicList != nullptr)\r
+ {\r
delete m_topicList;\r
+ }\r
m_topicList = topicsList;\r
}\r
\r
notification_sample_env.PrependUnique(LIBS = [
'liboctbstack',
'oc_logger',
+ 'oc',
'connectivity_abstraction',
'libcoap'
])
\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
{\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
provider->subscribe();\r
}\r
if (mainProvider.empty())\r
+ {\r
mainProvider = provider->getProviderId();\r
+ }\r
}\r
\r
void *OCProcessThread(void *ptr)\r
\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
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
{\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
\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
\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
notification_env.PrependUnique(LIBS = [
'oc_logger',
+ 'oc',
'notification_provider'
])
notification_env.AppendUnique(CXXFLAGS = ['-std=c++0x','-frtti'])
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'),
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')
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
#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
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
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
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);
}
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);
}
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
{
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(
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")));
}
}
};
-#endif //_NS_CONSUMER_SERVICE_SIMULATOR_H_
\ No newline at end of file
+#endif //_NS_CONSUMER_SERVICE_SIMULATOR_H_
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)
{
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);
{
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());
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()
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;
std::cout << e.what() << std::endl;
}
- resourceTypeName = "oic.r.sync.notification";
+ resourceTypeName = "oic.wk.notification.sync";
childUri = uri + m_syncUri;
try
{
}
resourceProperty = OC_DISCOVERABLE;
- resourceTypeName = "oic.r.notification";
+ resourceTypeName = "oic.wk.notification";
try
{
OC::OCPlatform::registerResource(
+++ /dev/null
-/******************************************************************\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
\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
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
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
}\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
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
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
{\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
<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
+++ /dev/null
-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
+++ /dev/null
-configurations.maybeCreate("default")
-artifacts.add("default", file('iotivity-armeabi-notification-service-release.aar'))
\ No newline at end of file
+++ /dev/null
-configurations.maybeCreate("default")
-artifacts.add("default", file('iotivity-base-armeabi-release.aar'))
\ No newline at end of file
-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
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
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
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
\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
\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
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
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
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
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
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
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
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
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
+++ /dev/null
-/*\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
<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
<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
+++ /dev/null
-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
+++ /dev/null
-configurations.create("default")
-artifacts.add("default", file('iotivity-armeabi-notification-service-debug.aar'))
\ No newline at end of file
+++ /dev/null
-configurations.create("default")
-artifacts.add("default", file('iotivity-base-armeabi-debug.aar'))
\ No newline at end of file
-include ':app', ':iotivity-armeabi-notification-service-debug', ':iotivity-base-armeabi-debug'\r
+include ':app'\r
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;
#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"
#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
{
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,
+++ /dev/null
-//******************************************************************\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
}
newMsg = NSInitializeMessage();
+ NS_VERIFY_NOT_NULL(newMsg, NULL);
newMsg->messageId = copyMsg->messageId;
OICStrcpy(newMsg->providerId, UUID_STRING_SIZE, copyMsg->providerId);
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;
#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()
{
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));
strlen(msg->mediaContents->iconImage));
}
+ newMsg->extraInfo = NULL;
+ if (msg->extraInfo)
+ {
+ newMsg->extraInfo = OCRepPayloadClone(msg->extraInfo);
+ }
+
return newMsg;
}
void NSRemoveMessage(NSMessage * msg)
}
NSOICFree(msg->mediaContents);
+ if (msg->extraInfo)
+ {
+ OCRepPayloadDestroy(msg->extraInfo);
+ msg->extraInfo = NULL;
+ }
+
NSOICFree(msg);
}
#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
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);
}
}
+ 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);
retMsg->dateTime = NULL;
retMsg->ttl = 0;
retMsg->mediaContents = NULL;
+ retMsg->extraInfo = NULL;
return retMsg;
}
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;
#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);
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;
NSCacheList * cache = *(NSGetProviderCacheList());
if (cache)
{
- NSStorageDestroy(cache);
+ NSConsumerStorageDestroy(cache);
}
NSSetProviderCacheList(NULL);
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);
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;
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));
if (!ProviderCache)
{
NS_LOG(DEBUG, "Provider Cache Init");
- ProviderCache = NSStorageCreate();
+ ProviderCache = NSConsumerStorageCreate();
NS_VERIFY_NOT_NULL_V(ProviderCache);
ProviderCache->cacheType = NS_CONSUMER_CACHE_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);
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();
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();
#endif // __cplusplus
#include "NSStructs.h"
-#include "NSStorageAdapter.h"
#include "NSConsumerMemoryCache.h"
#include "NSConsumerCommunication.h"
return g_NSCacheMutex;
}
-NSCacheList * NSStorageCreate()
+NSCacheList * NSConsumerStorageCreate()
{
pthread_mutex_t * mutex = NSGetCacheMutex();
pthread_mutex_lock(mutex);
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);
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);
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);
NSProvider_internal * newProvObj = (NSProvider_internal *) newObj->data;
- NSCacheElement * it = NSStorageRead(list, newProvObj->providerId);
+ NSCacheElement * it = NSConsumerStorageRead(list, newProvObj->providerId);
pthread_mutex_lock(mutex);
}
-NSResult NSStorageDestroy(NSCacheList * list)
+NSResult NSConsumerStorageDestroy(NSCacheList * list)
{
NS_VERIFY_NOT_NULL(list, NS_ERROR);
#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);
#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);
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);
void NSDestroyQueue(NSConsumerQueue *);
-bool NSPushQueue(NSConsumerQueue *, NSConsumerQueueObject *);
+bool NSPushConsumerQueue(NSConsumerQueue *, NSConsumerQueueObject *);
NSConsumerQueueObject * NSPopQueue(NSConsumerQueue *);
}
else
{
- NSPushQueue(queue, obj);
+ NSPushConsumerQueue(queue, obj);
}
NSThreadUnlock(msgHandleThread);
#include "NSProviderListener.h"\r
#include "NSProviderSubscription.h"\r
#include "NSProviderNotification.h"\r
-#include "NSStorageAdapter.h"\r
#include "NSProviderMemoryCache.h"\r
#include "NSProviderCallbackResponse.h"\r
#include "oic_malloc.h"\r
#include "NSProviderSubscription.h"
#include "NSProviderNotification.h"
#include "NSProviderCallbackResponse.h"
-#include "NSStorageAdapter.h"
#include "NSProviderMemoryCache.h"
#include "NSProviderTopic.h"
#include "oic_malloc.h"
void NSDeinitailize()
{
- NSStorageDestroy(consumerSubList);
- NSStorageDestroy(consumerTopicList);
- NSStorageDestroy(registeredTopicList);
+ NSProviderStorageDestroy(consumerSubList);
+ NSProviderStorageDestroy(consumerTopicList);
+ NSProviderStorageDestroy(registeredTopicList);
pthread_mutex_destroy(&NSCacheMutex);
pthread_mutexattr_destroy(&NSCacheMutexAttr);
pthread_mutex_lock(&nsInitMutex);
- if(msg == NULL)
+ if (!initProvider || msg == NULL)
{
NS_LOG(ERROR, "Msg is NULL");
pthread_mutex_unlock(&nsInitMutex);
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;
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;
}
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()
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)
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");
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");
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);
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);
#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
#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
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
return NS_ERROR;\r
}\r
\r
- NSCacheElement * it = NSStorageRead(list, id);\r
+ NSCacheElement * it = NSProviderStorageRead(list, id);\r
\r
if (it)\r
{\r
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
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
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
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
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
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
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
{\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
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
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
#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
}
#endif
-
NSResult NSCreateResource(char *uri)
{
NS_LOG(DEBUG, "NSCreateResource - IN");
}
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)
{
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)
{
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)
{
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
{
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
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
{\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
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
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
\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
: 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
}\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
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
bool NSGetPolicy();\r
void NSSetPolicy(bool policy);\r
bool NSGetResourceSecurity();\r
+void NSSetResourceSecurity(bool secured);\r
\r
#endif /* _NS_PROVIDER_SYSTEM__H_ */\r
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
\r
size_t NSProviderGetTopicListSize(NSTopicLL * firstElement)\r
{\r
- if(!firstElement)\r
+ if (!firstElement)\r
{\r
return 0;\r
}\r
\r
NSTopicLL * iter = firstElement;\r
\r
- while(iter)\r
+ while (iter)\r
{\r
cnt++;\r
iter = iter->next;\r
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
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
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
\r
if (subData->isWhite)\r
{\r
- if(subData->messageObId != 0)\r
+ if (subData->messageObId != 0)\r
{\r
obArray[obCount++] = subData->messageObId;\r
}\r
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
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
\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
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
{\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
}\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
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
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
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
{\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
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
#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
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);
}
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);
}
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(
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,
}
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")));
}
}
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)
{
[& 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
{
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);
{
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");
}
}
);
{
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());
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)
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;
}
//resourceProperty |= OC_OBSERVABLE;
- resourceTypeName = "oic.r.message.notification";
+ resourceTypeName = "oic.wk.notification.message";
childUri = uri + m_messageUri;
try
{
std::cout << e.what() << std::endl;
}
- resourceTypeName = "oic.r.sync.notification";
+ resourceTypeName = "oic.wk.notification.sync";
childUri = uri + m_syncUri;
try
{
}
resourceProperty |= OC_DISCOVERABLE;
- resourceTypeName = "oic.r.notification";
+ resourceTypeName = "oic.wk.notification";
try
{
OC::OCPlatform::registerResource(
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);
}
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);
}
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)
}
});
- 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)
});
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)
});
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)
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();
}
}
- 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)
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();
}
}
- EXPECT_EQ(isSame, true);
-
NSProviderUnregisterTopic(str.c_str());
-
- responseCon.wait_for(lock, std::chrono::milliseconds(500));
+ EXPECT_EQ(isSame, true);
}
TEST_F(NotificationProviderTest, ExpectEqualSetConsumerTopicsAndGetConsumerTopics)
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);
}
}
- 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)
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);
}
}
- 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)
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);
}
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')