# 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 ((msg->topic != nullptr) && strlen(msg->topic))\r
m_topic.assign(msg->topic, strlen(msg->topic));\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
else\r
m_mediaContents = new NSMediaContents();\r
m_topic = msg.getTopic();\r
+ m_extraInfo = OC::OCRepresentation(msg.getExtraInfo());\r
}\r
\r
NSMessage &NSMessage::operator=(const NSMessage &msg)\r
else\r
this->m_mediaContents = new NSMediaContents();\r
this->m_topic = msg.getTopic();\r
+ this->m_extraInfo = OC::OCRepresentation(msg.getExtraInfo());\r
return *this;\r
}\r
\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
* 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
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')
notification_sample_env.PrependUnique(LIBS = [
'liboctbstack',
'oc_logger',
+ 'oc',
'connectivity_abstraction',
'libcoap'
])
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->mediaContents->iconImage = OICStrdup(msg->getMediaContents()->getIconImage().c_str());\r
else\r
nsMsg->mediaContents->iconImage = nullptr;\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
configurePlatform();
gAcceptor = policy;
try{
- int result = ioTNotification.start(this, this, policy, "Info");
+ int result = ioTNotification.start(this, this, policy, "Info", false);
Log.i(TAG, "Notification Start: " + result);
}
catch(Exception e){