\r
#include "JniNotificationConsumer.h"\r
#include "NSConsumerService.h"\r
+#include "NSException.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_discoverListener = NULL;\r
static jobject g_obj_syncListener = NULL;\r
+static jobject g_obj_discoverListener = NULL;\r
static jobject g_obj_acceptListener = NULL;\r
\r
jclass g_cls_Message;\r
jclass g_cls_Provider;\r
jclass g_cls_SyncInfo;\r
+jclass g_cls_SyncType;\r
jclass g_cls_MediaContents;\r
+jclass g_cls_TopicState;\r
+jclass g_cls_Message_Type;\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
+ NS_LOGE ("Failed to get the environment");\r
return NULL;\r
}\r
else\r
return env;\r
}\r
case JNI_EVERSION:\r
- LOGE ("JNI version is not supported");\r
+ NS_LOGE ("JNI version is not supported");\r
+ return NULL;\r
default:\r
- LOGE ("Failed to get the environment");\r
+ NS_LOGE ("Failed to get the environment");\r
return NULL;\r
}\r
}\r
\r
-void onDiscoverProvider(OIC::Service::NSProvider *provider)\r
+jobject getJavaProviderState(JNIEnv *env, OIC::Service::NSProviderState state)\r
{\r
- LOGD ("ConsumerService_onDiscoverProvider");\r
+ NS_LOGD ("ConsumerService_getJavaProviderState - IN");\r
+ jobject providerState = NULL;\r
+ switch (state)\r
+ {\r
+ case OIC::Service::NSProviderState::ALLOW:\r
+ {\r
+ static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,\r
+ "ALLOW", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");\r
+ providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);\r
+ break;\r
+ }\r
+ case OIC::Service::NSProviderState::DENY:\r
+ {\r
+ static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,\r
+ "DENY", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");\r
+ providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);\r
+ break;\r
+ }\r
+ case OIC::Service::NSProviderState::TOPIC:\r
+ {\r
+ static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,\r
+ "TOPIC", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");\r
+ providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);\r
+ break;\r
+ }\r
+ case OIC::Service::NSProviderState::STOPPED:\r
+ {\r
+ static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,\r
+ "STOPPED", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");\r
+ providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);\r
+ break;\r
+ }\r
+ default:\r
+ {\r
+ providerState = NULL;\r
+ break;\r
+ }\r
+ }\r
+ NS_LOGD ("ConsumerService_getJavaProviderState - OUT");\r
+ return providerState;\r
+}\r
\r
- jint envRet;\r
- JNIEnv *env = GetJNIEnv(&envRet);\r
- if (NULL == env) return ;\r
+jobject getJavaSyncType(JNIEnv *env, OIC::Service::NSSyncInfo::NSSyncType nsType)\r
+{\r
+ NS_LOGD ("ConsumerService_getJavaSyncType - IN");\r
\r
- jobject jDiscoverListener = (jobject) env->NewLocalRef(g_obj_discoverListener);\r
- if (!jDiscoverListener)\r
+ // SyncType\r
+ jclass cls_SyncType = (jclass) (env->NewLocalRef(g_cls_SyncType));\r
+ if (!cls_SyncType)\r
{\r
- LOGE ("Failed to Get jDiscoverListener");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_LOGE ("Failed to Get ObjectClass for SyncType");\r
+ return NULL;\r
+ }\r
+ jobject syncType = NULL;\r
+ switch (nsType)\r
+ {\r
+ case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_UNREAD:\r
+ {\r
+ static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,\r
+ "UNREAD", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");\r
+ syncType = env->GetStaticObjectField(cls_SyncType, fieldID);\r
+ break;\r
+ }\r
+ case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ :\r
+ {\r
+ static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,\r
+ "READ", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");\r
+ syncType = env->GetStaticObjectField(cls_SyncType, fieldID);\r
+ break;\r
+ }\r
+ case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_DELETED :\r
+ {\r
+ static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,\r
+ "DELETED", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");\r
+ syncType = env->GetStaticObjectField(cls_SyncType, fieldID);\r
+ break;\r
+ }\r
+ default:\r
+ {\r
+ syncType = NULL;\r
+ break;\r
+ }\r
}\r
\r
- LOGD ("ProviderId : %s\n", provider->getProviderId().c_str());\r
+ NS_LOGD ("ConsumerService_getJavaSyncType - OUT");\r
+ return syncType;\r
+}\r
\r
- jstring jProviderId = env->NewStringUTF(provider->getProviderId().c_str());\r
- jlong pProvider = (long)provider;\r
+jobject getJavaTopicState(JNIEnv *env, OIC::Service::NSTopic::NSTopicState nsState)\r
+{\r
+ NS_LOGD ("ConsumerService_getJavaTopicState - IN");\r
\r
- jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));\r
- if (!cls_provider)\r
+ // TopicState\r
+ jclass cls_topicState = (jclass) (env->NewLocalRef(g_cls_TopicState));\r
+ if (!cls_topicState)\r
{\r
- LOGE ("Failed to Get ObjectClass for Provider");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_LOGE ("Failed to Get ObjectClass for TopicState Type");\r
+ return NULL;\r
}\r
- jmethodID mid_provider = env->GetMethodID(\r
- cls_provider, "<init>", "(Ljava/lang/String;)V");\r
- if (!mid_provider)\r
+ jobject topicState = NULL;\r
+\r
+ switch (nsState)\r
{\r
- LOGE ("Failed to Get MethodID for Provider<init>");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ case OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED:\r
+ {\r
+ static jfieldID fieldID = env->GetStaticFieldID(cls_topicState,\r
+ "UNSUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;");\r
+ topicState = env->GetStaticObjectField(cls_topicState, fieldID);\r
+ break;\r
+ }\r
+ case OIC::Service::NSTopic::NSTopicState::SUBSCRIBED:\r
+ {\r
+ static jfieldID fieldID = env->GetStaticFieldID(cls_topicState,\r
+ "SUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;");\r
+ topicState = env->GetStaticObjectField(cls_topicState, fieldID);\r
+ break;\r
+ }\r
+ default:\r
+ {\r
+ topicState = NULL;\r
+ break;\r
+ }\r
}\r
- jobject obj_provider = env->NewObject(cls_provider, mid_provider,\r
- jProviderId);\r
\r
- jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");\r
- if (!nativeHandle)\r
+ NS_LOGD ("ConsumerService_getJavaTopicState - OUT");\r
+ return topicState;\r
+}\r
+\r
+jobject getJavaTopicsList(JNIEnv *env, std::shared_ptr<OIC::Service::NSTopicsList> topicList)\r
+{\r
+ NS_LOGD ("ConsumerService_getJavaTopicsList - IN");\r
+ jclass cls_topicList = (jclass) (env->NewLocalRef(g_cls_TopicsList));\r
+ if (!cls_topicList)\r
{\r
- LOGE("Failed to get nativeHandle for Provider");\r
- return;\r
+ NS_LOGE ("Failed to Get ObjectClass for TopicsList");\r
+ return NULL;\r
}\r
- env->SetLongField(obj_provider, nativeHandle, pProvider);\r
-\r
- jclass cls = env->GetObjectClass(jDiscoverListener);\r
- if (!cls)\r
+ jmethodID mid_topicList = env->GetMethodID(cls_topicList, "<init>", "()V");\r
+ if (!mid_topicList)\r
{\r
- LOGE ("Failed to Get ObjectClass for jDiscoverListener");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_LOGE ("Failed to Get MethodID for TopicsList<init>");\r
+ return NULL;\r
}\r
- jmethodID mid = env->GetMethodID(\r
- cls,\r
- "onProviderDiscovered",\r
- "(Lorg/iotivity/service/ns/consumer/Provider;)V");\r
- if (!mid)\r
+ jobject obj_topicList = env->NewObject(cls_topicList, mid_topicList);\r
+ if (!obj_topicList)\r
{\r
- LOGE ("Failed to Get MethodID for onProviderDiscovered");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_LOGE ("Failed to Get object for TopicsList");\r
+ return NULL;\r
+ }\r
+ jmethodID mid_addTopic = env->GetMethodID(cls_topicList, "addTopic",\r
+ "(Ljava/lang/String;Lorg/iotivity/service/ns/common/Topic$TopicState;)V");\r
+ if (!mid_addTopic)\r
+ {\r
+ NS_LOGE ("Failed to Get MethodID for addTopic");\r
+ return NULL;\r
}\r
+ for (auto it : topicList->getTopicsList())\r
+ {\r
+ jobject jState = getJavaTopicState(env, it.getState());\r
+ std::string topicName = it.getTopicName();\r
+ jstring jTopicName = env->NewStringUTF(topicName.c_str());\r
+ env->CallVoidMethod(obj_topicList, mid_addTopic, jTopicName, jState);\r
+ }\r
+ env->DeleteLocalRef(cls_topicList);\r
+ NS_LOGD ("ConsumerService_getJavaTopicsList - OUT");\r
+ return obj_topicList;\r
+}\r
\r
- env->CallVoidMethod(jDiscoverListener, mid, obj_provider);\r
+bool getNativeTopicState(JNIEnv *env, jobject jTopic , OIC::Service::NSTopic::NSTopicState &state )\r
+{\r
+ NS_LOGD ("ConsumerService_getNativeTopicState - IN");\r
+\r
+ jclass cls_topic = env->GetObjectClass( jTopic);\r
+ // TopicState\r
+ jclass cls_TopicState = (jclass) (env->NewLocalRef(g_cls_TopicState));\r
+ if (!cls_TopicState)\r
+ {\r
+ NS_LOGE ("Failed to Get ObjectClass for cls_TopicState Type");\r
+ return false;\r
+ }\r
+ jmethodID mid = env->GetMethodID(cls_TopicState, "ordinal", "()I");\r
+ jfieldID fid_state = env->GetFieldID( cls_topic, "mState",\r
+ "Lorg/iotivity/service/ns/common/Topic$TopicState;");\r
+ if (fid_state == NULL)\r
+ {\r
+ NS_LOGE ("Error: jfieldID for state type is null");\r
+ return false;\r
+ }\r
+ jobject jobj = env->GetObjectField( jTopic, fid_state);\r
+ if (jobj == NULL)\r
+ {\r
+ NS_LOGE ("Error: object of field state Type is null");\r
+ return false;\r
+ }\r
+ jint jState = env->CallIntMethod(jobj, mid);\r
+ state = (OIC::Service::NSTopic::NSTopicState) jState;\r
+ NS_LOGD ("ConsumerService_getNativeTopicState - OUT");\r
+ return true;\r
\r
- env->DeleteLocalRef(jDiscoverListener);\r
- env->DeleteLocalRef(cls_provider);\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
}\r
\r
-void onSubscriptionAccepted(OIC::Service::NSProvider *provider)\r
+const char *getNativeTopicName(JNIEnv *env, jobject jTopic)\r
{\r
- LOGD ("ConsumerService_onSubscriptionAccepted");\r
+ NS_LOGD ("ConsumerService_getNativeTopicName - IN");\r
+ jclass cls_topic = env->GetObjectClass( jTopic);\r
+ if (cls_topic == NULL)\r
+ {\r
+ NS_LOGE ("Error: Class for Topic is null");\r
+ return nullptr;\r
+ }\r
+ jfieldID fid_name = env->GetFieldID( cls_topic, "mTopicName", "Ljava/lang/String;");\r
+ if (fid_name == NULL)\r
+ {\r
+ NS_LOGE ("Error: jfieldID for Topic Name is null");\r
+ return nullptr;\r
+ }\r
+ jstring jTopicName = (jstring) env->GetObjectField( jTopic, fid_name);\r
+ const char *topicName = NULL;\r
+ if (jTopicName)\r
+ {\r
+ topicName = env->GetStringUTFChars( jTopicName, NULL);\r
+ }\r
+ else\r
+ {\r
+ NS_LOGI (TAG, "Info: topicName is null");\r
+ }\r
+ NS_LOGD ("ConsumerService_getNativeTopicName - OUT");\r
+ return topicName;\r
\r
- jint envRet;\r
- JNIEnv *env = GetJNIEnv(&envRet);\r
- if (NULL == env) return ;\r
+}\r
\r
- jobject jAcceptListener = (jobject) env->NewLocalRef(g_obj_acceptListener);\r
- if (!jAcceptListener)\r
+std::shared_ptr<OIC::Service::NSTopicsList> getNativeTopicsList(JNIEnv *env, jobject jTopicList)\r
+{\r
+ NS_LOGD ("ConsumerService_getNativeTopicsList - IN");\r
+\r
+ jclass cls_topicList = env->GetObjectClass( jTopicList);\r
+ if (cls_topicList == NULL)\r
{\r
- LOGE ("Failed to Get jAcceptListener");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_LOGE ("Error: Class for Topic List is null");\r
+ return nullptr;\r
+ }\r
+ jfieldID fid_list = env->GetFieldID( cls_topicList, "mTopicsList", "Ljava/util/Vector;");\r
+ if (fid_list == NULL)\r
+ {\r
+ NS_LOGE ("Error: jfieldID for Topic List is null");\r
+ return nullptr;\r
+ }\r
+ jobject jobj = env->GetObjectField( jTopicList, fid_list);\r
+ if (jobj == NULL)\r
+ {\r
+ NS_LOGE ("Error: object of field Topic List is null");\r
+ return nullptr;\r
+ }\r
+ jclass cls_vec = env->FindClass("java/util/Vector");\r
+ if (cls_vec == NULL)\r
+ {\r
+ NS_LOGE ("Error: Class for Vector not found");\r
+ return nullptr;\r
+ }\r
+ jmethodID sizeMethod = env->GetMethodID(cls_vec, "size", "()I");\r
+ if (sizeMethod == NULL)\r
+ {\r
+ NS_LOGE ("Error: MethodId for Vector Size not found");\r
+ return nullptr;\r
+ }\r
+ int size = env->CallIntMethod(jobj, sizeMethod);\r
+ jmethodID getMethod = env->GetMethodID(cls_vec, "get", "(I)Ljava/lang/Object;");\r
+ if (getMethod == NULL)\r
+ {\r
+ NS_LOGE ("Error: MethodId for Vector get not found");\r
+ return nullptr;\r
+ }\r
+ std::shared_ptr<OIC::Service::NSTopicsList> nsTopicList =\r
+ std::make_shared<OIC::Service::NSTopicsList>();\r
+ for (int index = 0; index < size; index++)\r
+ {\r
+ jobject topicObj = env->CallObjectMethod(jobj, getMethod, index);\r
+ if (topicObj == NULL)\r
+ {\r
+ NS_LOGE ("Error: object of field Topic is null");\r
+ return nullptr;\r
+ }\r
+ const char *name = getNativeTopicName(env, topicObj);\r
+ if (name == nullptr)\r
+ {\r
+ NS_LOGE ("Error: Couldn't find topic Name");\r
+ return nullptr;\r
+ }\r
+ std::string topicName(name);\r
+ OIC::Service::NSTopic::NSTopicState state = OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED;\r
+ if (!getNativeTopicState(env, topicObj, state))\r
+ {\r
+ return nullptr;\r
+ }\r
+ nsTopicList->addTopic(topicName, state);\r
}\r
\r
- LOGD ("ProviderId : %s\n", provider->getProviderId().c_str());\r
+ env->DeleteLocalRef(cls_vec);\r
+ env->DeleteLocalRef(cls_topicList);\r
+ NS_LOGD ("ConsumerService_getNativeTopicsList - OUT");\r
+ return nsTopicList;\r
+}\r
+\r
+jobject getJavaProvider(JNIEnv *env, std::shared_ptr<OIC::Service::NSProvider> provider)\r
+{\r
+ NS_LOGD ("ConsumerService_getJavaProvider - IN");\r
+ NS_LOGD ("ProviderId : %s\n", provider->getProviderId().c_str());\r
\r
jstring jProviderId = env->NewStringUTF(provider->getProviderId().c_str());\r
- jlong pProvider = (long)provider;\r
+ auto *objectHolder = JniSharedObjectHolder<OIC::Service::NSProvider>::create(provider);\r
+ if (!objectHolder)\r
+ {\r
+ NS_LOGE ("Failed to create new Object Holder for Provider");\r
+ return NULL;\r
+ }\r
+ jlong pProvider = (long)objectHolder;\r
\r
jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));\r
if (!cls_provider)\r
{\r
- LOGE ("Failed to Get ObjectClass for Provider");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_LOGE ("Failed to Get ObjectClass for Provider");\r
+ return NULL;\r
}\r
jmethodID mid_provider = env->GetMethodID(\r
cls_provider, "<init>", "(Ljava/lang/String;)V");\r
if (!mid_provider)\r
{\r
- LOGE ("Failed to Get MethodID for Provider<init>");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_LOGE ("Failed to Get MethodID for Provider<init>");\r
+ return NULL;\r
+ }\r
+ jobject obj_provider = env->NewObject(cls_provider, mid_provider, jProviderId);\r
+ if (!obj_provider)\r
+ {\r
+ NS_LOGE ("Failed to create new Object for Provider");\r
+ return NULL;\r
}\r
- jobject obj_provider = env->NewObject(cls_provider, mid_provider,\r
- jProviderId);\r
\r
jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");\r
if (!nativeHandle)\r
{\r
- LOGE("Failed to get nativeHandle for Provider");\r
- return;\r
+ NS_LOGE ("Failed to get nativeHandle for Provider");\r
+ return NULL;\r
}\r
env->SetLongField(obj_provider, nativeHandle, pProvider);\r
\r
- jclass cls = env->GetObjectClass(jAcceptListener);\r
- if (!cls)\r
- {\r
- LOGE ("Failed to Get ObjectClass for jAcceptListener");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
- }\r
- jmethodID mid = env->GetMethodID(\r
- cls,\r
- "onSubscriptionAccepted",\r
- "(Lorg/iotivity/service/ns/consumer/Provider;)V");\r
- if (!mid)\r
- {\r
- LOGE ("Failed to Get MethodID for onSubscriptionAccepted");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
- }\r
-\r
- env->CallVoidMethod(jAcceptListener, mid, obj_provider);\r
-\r
- env->DeleteLocalRef(jAcceptListener);\r
env->DeleteLocalRef(cls_provider);\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
-\r
+ NS_LOGD ("ConsumerService_getJavaProvider - OUT");\r
+ return obj_provider;\r
}\r
\r
jobject getJavaMessageType(JNIEnv *env, OIC::Service::NSMessage::NSMessageType type)\r
{\r
+ NS_LOGD ("ConsumerService_getJavaMessageType - IN");\r
+ jobject messageType = NULL;\r
switch (type)\r
{\r
case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_ALERT:\r
{\r
- static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message,\r
+ static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,\r
"ALERT", "Lorg/iotivity/service/ns/common/Message$MessageType;");\r
- return env->GetStaticObjectField(g_cls_Message, fieldID);\r
+ messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);\r
+ break;\r
}\r
case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_NOTICE:\r
{\r
- static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message,\r
+ static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,\r
"NOTICE", "Lorg/iotivity/service/ns/common/Message$MessageType;");\r
- return env->GetStaticObjectField(g_cls_Message, fieldID);\r
+ messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);\r
+ break;\r
}\r
case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_EVENT:\r
{\r
- static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message,\r
+ static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,\r
"EVENT", "Lorg/iotivity/service/ns/common/Message$MessageType;");\r
- return env->GetStaticObjectField(g_cls_Message, fieldID);\r
+ messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);\r
+ break;\r
}\r
case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_INFO:\r
{\r
- static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message,\r
+ static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,\r
"INFO", "Lorg/iotivity/service/ns/common/Message$MessageType;");\r
- return env->GetStaticObjectField(g_cls_Message, fieldID);\r
+ messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);\r
+ break;\r
}\r
default:\r
- return NULL;\r
+ {\r
+ messageType = NULL;\r
+ break;\r
+ }\r
}\r
- return NULL;\r
+ NS_LOGD ("ConsumerService_getJavaMessageType - OUT");\r
+ return messageType;\r
}\r
\r
-void onMessagePosted(OIC::Service::NSMessage *message)\r
+jobject getJavaMessage(JNIEnv *env, OIC::Service::NSMessage message)\r
{\r
- LOGD ("ConsumerService_onMessagePosted");\r
-\r
- jint envRet;\r
- JNIEnv *env = GetJNIEnv(&envRet);\r
- if (NULL == env) return ;\r
-\r
- jobject jPostListener = (jobject) env->NewLocalRef(g_obj_postListener);\r
- if (!jPostListener)\r
- {\r
- LOGE ("Failed to Get jPostListener");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
- }\r
-\r
- LOGD ("id : %llu\n", message->getMessageId());\r
- LOGD ("title : %s\n", message->getTitle().c_str());\r
- LOGD ("content : %s\n", message->getContentText().c_str());\r
- LOGD ("source : %s\n", message->getSourceName().c_str());\r
+ NS_LOGD ("ConsumerService_getJavaMessage - IN");\r
\r
- jlong jMessageId = (jlong) message->getMessageId();\r
- jstring jProviderId = env->NewStringUTF(message->getProviderId().c_str());\r
- jstring jTitle = env->NewStringUTF(message->getTitle().c_str());\r
- jstring jContentText = env->NewStringUTF(message->getContentText().c_str());\r
- jstring jSourceName = env->NewStringUTF(message->getSourceName().c_str());\r
+ NS_LOGD ("id : %llu\n", message.getMessageId());\r
+ NS_LOGD ("title : %s\n", message.getTitle().c_str());\r
+ NS_LOGD ("content : %s\n", message.getContentText().c_str());\r
+ NS_LOGD ("source : %s\n", message.getSourceName().c_str());\r
\r
- jstring jTime = env->NewStringUTF(message->getTime().c_str());\r
- jlong jTTL = (jlong) message->getTTL();\r
+ jlong jMessageId = (jlong) message.getMessageId();\r
+ jstring jProviderId = env->NewStringUTF(message.getProviderId().c_str());\r
+ jstring jTitle = env->NewStringUTF(message.getTitle().c_str());\r
+ jstring jContentText = env->NewStringUTF(message.getContentText().c_str());\r
+ jstring jSourceName = env->NewStringUTF(message.getSourceName().c_str());\r
+ jstring jTopic = env->NewStringUTF(message.getTopic().c_str());\r
\r
- jlong pMessage = (long) message;\r
+ jstring jTime = env->NewStringUTF(message.getTime().c_str());\r
+ jlong jTTL = (jlong) message.getTTL();\r
\r
jclass cls_message = (jclass) (env->NewLocalRef(g_cls_Message));\r
if (!cls_message)\r
{\r
- LOGE ("Failed to Get ObjectClass for Message");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_LOGE ("Failed to Get ObjectClass for Message");\r
+ return NULL ;\r
}\r
jmethodID mid_message = env->GetMethodID(\r
cls_message, "<init>",\r
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");\r
if (!mid_message)\r
{\r
- LOGE ("Failed to Get MethodID for Message<init>");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_LOGE ("Failed to Get MethodID for Message<init>");\r
+ return NULL;\r
}\r
jobject obj_message = env->NewObject(cls_message, mid_message,\r
jTitle, jContentText, jSourceName);\r
-\r
- jfieldID fid_nativeHandle = env->GetFieldID(cls_message, "mNativeHandle", "J");\r
- if (!fid_nativeHandle)\r
+ if (!obj_message)\r
{\r
- LOGE("Failed to get nativeHandle for Message");\r
- return;\r
+ NS_LOGE ("Failed to Get Java Object for Message");\r
+ return NULL;\r
}\r
- env->SetLongField(obj_message, fid_nativeHandle, pMessage);\r
\r
jfieldID fid_messageId = env->GetFieldID(cls_message, "mMessageId", "J");\r
if (!fid_messageId)\r
{\r
- LOGE("Failed to get field MessageID for Message");\r
- return;\r
+ NS_LOGE ("Failed to get field MessageID for Message");\r
+ return NULL;\r
}\r
env->SetLongField(obj_message, fid_messageId, jMessageId);\r
\r
jfieldID fid_providerId = env->GetFieldID(cls_message, "mProviderId", "Ljava/lang/String;");\r
if (!fid_providerId)\r
{\r
- LOGE("Failed to get field ProviderID for Message");\r
- return;\r
+ NS_LOGE ("Failed to get field ProviderID for Message");\r
+ return NULL;\r
}\r
env->SetObjectField(obj_message, fid_providerId, jProviderId);\r
\r
jfieldID fid_time = env->GetFieldID(cls_message, "mTime", "Ljava/lang/String;");\r
if (!fid_time)\r
{\r
- LOGE("Failed to get field Time for Message");\r
- return;\r
+ NS_LOGE ("Failed to get field Time for Message");\r
+ return NULL;\r
}\r
env->SetObjectField(obj_message, fid_time, jTime);\r
\r
jfieldID fid_ttl = env->GetFieldID(cls_message, "mTTL", "J");\r
if (!fid_ttl)\r
{\r
- LOGE("Failed to get field TTL for Message");\r
- return;\r
+ NS_LOGE ("Failed to get field TTL for Message");\r
+ return NULL;\r
}\r
env->SetLongField(obj_message, fid_ttl, jTTL);\r
\r
- OIC::Service::NSMediaContents *mediaCont = message->getMediaContents();\r
+ jfieldID fid_topic = env->GetFieldID(cls_message, "mTopic", "Ljava/lang/String;");\r
+ if (!fid_topic)\r
+ {\r
+ NS_LOGE ("Failed to get mTopic for Message");\r
+ return NULL;\r
+ }\r
+ env->SetObjectField(obj_message, fid_topic, jTopic);\r
+\r
+ OIC::Service::NSMediaContents *mediaCont = message.getMediaContents();\r
if (mediaCont != nullptr)\r
{\r
jstring jIconImage = env->NewStringUTF(mediaCont->getIconImage().c_str());\r
jclass cls_mediaContents = (jclass) (env->NewLocalRef(g_cls_MediaContents));\r
if (!cls_mediaContents)\r
{\r
- LOGE ("Failed to Get ObjectClass for MediaContents");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_LOGE ("Failed to Get ObjectClass for MediaContents");\r
+ return NULL;\r
}\r
jmethodID mid_mediaContents = env->GetMethodID(\r
cls_mediaContents, "<init>", "(Ljava/lang/String;)V");\r
if (!mid_mediaContents)\r
{\r
- LOGE ("Failed to Get MethodID for MediaContents<init>");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_LOGE ("Failed to Get MethodID for MediaContents<init>");\r
+ return NULL;\r
}\r
jobject obj_mediaContents = env->NewObject(cls_mediaContents, mid_mediaContents,\r
jIconImage);\r
"Lorg/iotivity/service/ns/common/MediaContents;");\r
if (!fid_mediaContents)\r
{\r
- LOGE("Failed to get field mediaContents for Message");\r
- return;\r
+ NS_LOGE ("Failed to get field mediaContents for Message");\r
+ return NULL;\r
}\r
env->SetObjectField(obj_message, fid_mediaContents, obj_mediaContents);\r
\r
}\r
\r
- jobject jType = getJavaMessageType(env, message->getType());\r
- if (!jType)\r
+ jobject jType = getJavaMessageType(env, message.getType());\r
+ if (jType)\r
{\r
- LOGE("Failed to get Type value for Message");\r
- return;\r
- }\r
- jfieldID fid_type = env->GetFieldID(cls_message, "mType",\r
- "Lorg/iotivity/service/ns/common/Message$MessageType;");\r
- if (!fid_type)\r
- {\r
- LOGE("Failed to get field Type for Message");\r
- return;\r
+ jfieldID fid_type = env->GetFieldID(cls_message, "mType",\r
+ "Lorg/iotivity/service/ns/common/Message$MessageType;");\r
+ if (!fid_type)\r
+ {\r
+ NS_LOGE ("Failed to get field Type for Message");\r
+ return NULL;\r
+ }\r
+ env->SetObjectField(obj_message, fid_type, jType);\r
}\r
- env->SetObjectField(obj_message, fid_type, jType);\r
\r
+ NS_LOGD ("Reading OCRepresentation Object from Native");\r
\r
- jclass cls = env->GetObjectClass(jPostListener);\r
- if (!cls)\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 Get ObjectClass for jPostListener");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_LOGE ("Failed to create OcRepresentation");\r
+ delete ocRepresentation;\r
}\r
- jmethodID mid = env->GetMethodID(\r
- cls,\r
- "onMessageReceived",\r
- "(Lorg/iotivity/service/ns/common/Message;)V");\r
- if (!mid)\r
+ else\r
{\r
- LOGE ("Failed to Get MethodID for onMessageReceived");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_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
+ NS_LOGE ("Failed to get mExtraInfo for Message");\r
+ delete ocRepresentation;\r
+ return NULL;\r
+ }\r
+ NS_LOGD ("setting extraInfo field");\r
+ env->SetObjectField(obj_message, fid_extraInfo, jRepresentation);\r
\r
- env->CallVoidMethod(jPostListener, mid, obj_message);\r
-\r
- env->DeleteLocalRef(jPostListener);\r
env->DeleteLocalRef(cls_message);\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
- return ;\r
+ NS_LOGD ("ConsumerService_getJavaMessage - OUT");\r
+ return obj_message;\r
}\r
\r
-void onSyncInfoReceived(OIC::Service::NSSyncInfo *sync)\r
+void onDiscoverProvider(std::shared_ptr<OIC::Service::NSProvider> provider)\r
{\r
- LOGD ("ConsumerService_onSyncInfoReceived");\r
+ NS_LOGD ("ConsumerService_onDiscoverProvider - IN");\r
\r
- jint envRet;\r
+ jint envRet = 0;;\r
JNIEnv *env = GetJNIEnv(&envRet);\r
- if (NULL == env) return ;\r
-\r
- jobject jSyncListener = (jobject) env->NewLocalRef(g_obj_syncListener);\r
- if (!jSyncListener)\r
+ if (NULL == env)\r
{\r
- LOGE ("Failed to Get jSyncListener");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
return ;\r
}\r
\r
- LOGD ("Sync ID : %llu\n", sync->getMessageId());\r
- LOGD ("Sync ProviderId : %s\n", sync->getProviderId().c_str());\r
- LOGD ("Sync STATE : %d\n", (int) sync->getState());\r
-\r
- jlong jMessageId = (jlong) sync->getMessageId();\r
- jstring jProviderId = env->NewStringUTF(sync->getProviderId().c_str());\r
- jint jState = (jint) sync->getState();\r
-\r
- jclass cls_sync = (jclass) (env->NewLocalRef(g_cls_SyncInfo));\r
- if (!cls_sync)\r
+ jobject jDiscoverListener = (jobject) env->NewLocalRef(g_obj_discoverListener);\r
+ if (!jDiscoverListener)\r
{\r
- LOGE ("Failed to Get ObjectClass for SyncInfo");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+ NS_LOGE ("Failed to Get jDiscoverListener");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
return ;\r
}\r
- jmethodID mid_sync = env->GetMethodID(\r
- cls_sync, "<init>", "(JLjava/lang/String;I)V");\r
- if (!mid_sync)\r
+\r
+ jobject obj_provider = getJavaProvider(env, provider);\r
+ if (!obj_provider)\r
{\r
- LOGE ("Failed to Get MethodID for SyncInfo<init>");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+ NS_LOGE ("Failed to Get Provider Object");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
return ;\r
}\r
- jobject obj_sync = env->NewObject(cls_sync, mid_sync,\r
- jMessageId, jProviderId, jState);\r
\r
- jclass cls = env->GetObjectClass(jSyncListener);\r
+ jclass cls = env->GetObjectClass(jDiscoverListener);\r
if (!cls)\r
{\r
- LOGE ("Failed to Get ObjectClass for jSyncListener");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+ NS_LOGE ("Failed to Get ObjectClass for jDiscoverListener");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
return ;\r
}\r
jmethodID mid = env->GetMethodID(\r
cls,\r
- "onSyncInfoReceived",\r
- "(Lorg/iotivity/service/ns/common/SyncInfo;)V");\r
+ "onProviderDiscovered",\r
+ "(Lorg/iotivity/service/ns/consumer/Provider;)V");\r
if (!mid)\r
{\r
- LOGE ("Failed to Get MethodID for onSyncInfoReceived");\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+ NS_LOGE ("Failed to Get MethodID for onProviderDiscovered");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
return ;\r
}\r
\r
- env->CallVoidMethod(jSyncListener, mid, obj_sync);\r
+ env->CallVoidMethod(jDiscoverListener, mid, obj_provider);\r
\r
- env->DeleteLocalRef(jSyncListener);\r
- env->DeleteLocalRef(cls_sync);\r
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
+ env->DeleteLocalRef(jDiscoverListener);\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ NS_LOGD ("ConsumerService_onDiscoverProvider - OUT");\r
return ;\r
}\r
\r
-JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStart\r
-(JNIEnv *env, jobject jObj, jobject jDiscoverListener, jobject jAccpetListener)\r
+void onProviderState( OIC::Service::NSProviderState state)\r
{\r
- LOGD ("ConsumerService_StartConsumer");\r
- if (!jDiscoverListener || !jAccpetListener)\r
+ NS_LOGD ("ConsumerService_onProviderState -IN");\r
+\r
+ jint envRet = 0;;\r
+ JNIEnv *env = GetJNIEnv(&envRet);\r
+ if (NULL == env)\r
{\r
- ThrowNSException(NS_ERROR, "Listener cannot be null");\r
return ;\r
}\r
\r
- if (g_obj_discoverListener != NULL)\r
+ jobject jAcceptListener = (jobject) env->NewLocalRef(g_obj_acceptListener);\r
+ if (!jAcceptListener)\r
{\r
- env->DeleteGlobalRef(g_obj_discoverListener);\r
+ NS_LOGE ("Failed to Get jAcceptListener");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
}\r
- if (g_obj_acceptListener != NULL)\r
+ jobject obj_state = getJavaProviderState(env, state);\r
+ if (!obj_state)\r
{\r
- env->DeleteGlobalRef(g_obj_acceptListener);\r
+ NS_LOGE ("Failed to Get ProviderState Object");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
}\r
\r
- g_obj_discoverListener = (jobject) env->NewGlobalRef(jDiscoverListener);\r
- g_obj_acceptListener = (jobject) env->NewGlobalRef(jAccpetListener);\r
-\r
- OIC::Service::NSConsumerService::ConsumerConfig cfg;\r
- cfg.m_discoverCb = onDiscoverProvider;\r
- cfg.m_acceptedCb = onSubscriptionAccepted;\r
+ jclass cls = env->GetObjectClass(jAcceptListener);\r
+ if (!cls)\r
+ {\r
+ NS_LOGE ("Failed to Get ObjectClass for jAcceptListener");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
+ }\r
+ jmethodID mid = env->GetMethodID(\r
+ cls,\r
+ "onProviderStateReceived",\r
+ "(Lorg/iotivity/service/ns/consumer/Provider$ProviderState;)V");\r
+ if (!mid)\r
+ {\r
+ NS_LOGE ("Failed to Get MethodID for onProviderState");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
+ }\r
+ env->CallVoidMethod(jAcceptListener, mid, obj_state);\r
\r
- OIC::Service::NSConsumerService::getInstance()->Start(cfg);\r
+ env->DeleteLocalRef(jAcceptListener);\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ NS_LOGD ("ConsumerService_onProviderState -OUT");\r
+ return ;\r
\r
}\r
\r
-JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStop\r
-(JNIEnv *env, jobject jObj)\r
+void onMessagePosted(OIC::Service::NSMessage message)\r
{\r
- LOGD ("ConsumerService_StopConsumer");\r
+ NS_LOGD ("ConsumerService_onMessagePosted -IN");\r
\r
- env->DeleteGlobalRef(g_obj_postListener);\r
- env->DeleteGlobalRef(g_obj_discoverListener);\r
- env->DeleteGlobalRef(g_obj_syncListener);\r
- env->DeleteGlobalRef(g_obj_acceptListener);\r
- g_obj_postListener = NULL;\r
- g_obj_discoverListener = NULL;\r
- g_obj_syncListener = NULL;\r
- g_obj_acceptListener = NULL;\r
- OIC::Service::NSConsumerService::getInstance()->Stop();\r
-}\r
+ jint envRet = 0;;\r
+ JNIEnv *env = GetJNIEnv(&envRet);\r
+ if (NULL == env)\r
+ {\r
+ return ;\r
+ }\r
\r
-JNIEXPORT jint JNICALL\r
-Java_org_iotivity_service_ns_consumer_ConsumerService_nativeEnableRemoteService\r
-(JNIEnv *env, jobject jObj, jstring jServerAddress)\r
-{\r
- LOGD ("ConsumerService_EnableRemoteService");\r
- if (!jServerAddress)\r
+ jobject jPostListener = (jobject) env->NewLocalRef(g_obj_postListener);\r
+ if (!jPostListener)\r
{\r
- ThrowNSException(NS_ERROR, "EnableRemoteService server address NULL");\r
- return (jint) OIC::Service::Result::ERROR;\r
+ NS_LOGE ("Failed to Get jPostListener");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
}\r
- const char *serverAddress = env->GetStringUTFChars(jServerAddress, 0);\r
- OIC::Service::Result res =\r
- OIC::Service::NSConsumerService::getInstance()->EnableRemoteService(std::string(serverAddress));\r
- env->ReleaseStringUTFChars(jServerAddress, serverAddress);\r
- return (jint) res;\r
-}\r
\r
-JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeRescanProvider\r
-(JNIEnv *env, jobject jObj)\r
-{\r
- LOGD ("ConsumerService_RescanProvider");\r
+ jobject obj_message = getJavaMessage( env, message);\r
+ if (!obj_message)\r
+ {\r
+ NS_LOGE ("Failed to Get Message Object");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
+ }\r
+ jclass cls = env->GetObjectClass(jPostListener);\r
+ if (!cls)\r
+ {\r
+ NS_LOGE ("Failed to Get ObjectClass for jPostListener");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
+ }\r
+ jmethodID mid = env->GetMethodID(\r
+ cls,\r
+ "onMessageReceived",\r
+ "(Lorg/iotivity/service/ns/common/Message;)V");\r
+ if (!mid)\r
+ {\r
+ NS_LOGE ("Failed to Get MethodID for onMessageReceived");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
+ }\r
+\r
+ env->CallVoidMethod(jPostListener, mid, obj_message);\r
\r
- OIC::Service::NSConsumerService::getInstance()->RescanProvider();\r
+ env->DeleteLocalRef(jPostListener);\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ NS_LOGD ("ConsumerService_onMessagePosted -OUT");\r
+ return ;\r
}\r
\r
-JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeGetProvider\r
-(JNIEnv *env, jobject jObj, jstring jProviderId)\r
+void onSyncInfoReceived(OIC::Service::NSSyncInfo sync)\r
{\r
- LOGD ("ConsumerService_GetProvider");\r
- if (!jProviderId)\r
+ NS_LOGD ("ConsumerService_onSyncInfoReceived - IN");\r
+\r
+ jint envRet = 0;\r
+ JNIEnv *env = GetJNIEnv(&envRet);\r
+ if (NULL == env)\r
{\r
- ThrowNSException(NS_ERROR, "ProviderId cannot be null");\r
- return NULL;\r
+ return ;\r
}\r
\r
- const char *providerId = env->GetStringUTFChars(jProviderId, 0);\r
+ jobject jSyncListener = (jobject) env->NewLocalRef(g_obj_syncListener);\r
+ if (!jSyncListener)\r
+ {\r
+ NS_LOGE ("Failed to Get jSyncListener");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
+ }\r
+\r
+ NS_LOGD ("Sync ID : %llu\n", sync.getMessageId());\r
+ NS_LOGD ("Sync ProviderId : %s\n", sync.getProviderId().c_str());\r
+ NS_LOGD ("Sync STATE : %d\n", (int) sync.getState());\r
\r
- OIC::Service::NSProvider *provider =\r
- OIC::Service::NSConsumerService::getInstance()->getProvider(std::string(providerId));\r
- if (provider == nullptr)\r
+ jlong jMessageId = (jlong) sync.getMessageId();\r
+ jstring jProviderId = env->NewStringUTF(sync.getProviderId().c_str());\r
+ jobject syncType = getJavaSyncType(env, sync.getState());\r
+ if (!syncType)\r
{\r
- ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");\r
- return NULL;\r
+ NS_LOGE ("Failed to Get syncType for SyncInfo");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
+ }\r
+ jclass cls_SyncInfo = (jclass) (env->NewLocalRef(g_cls_SyncInfo));\r
+ if (!cls_SyncInfo)\r
+ {\r
+ NS_LOGE ("Failed to Get ObjectClass for SyncInfo");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
+ }\r
+ jmethodID mid_syncInfo = env->GetMethodID(\r
+ cls_SyncInfo,\r
+ "<init>",\r
+ "(JLjava/lang/String;Lorg/iotivity/service/ns/common/SyncInfo$SyncType;)V");\r
+ if (!mid_syncInfo)\r
+ {\r
+ NS_LOGE ("Failed to Get MethodID for SyncInfo");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
}\r
\r
- LOGD ("ProviderId : %s\n", provider->getProviderId().c_str());\r
+ jobject obj_syncInfo = env->NewObject( cls_SyncInfo, mid_syncInfo,\r
+ jMessageId, jProviderId, syncType);\r
+ if (!obj_syncInfo)\r
+ {\r
+ NS_LOGE ("Failed to Get Object for SyncInfo");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
+ }\r
\r
- jProviderId = env->NewStringUTF(provider->getProviderId().c_str());\r
- jlong pProvider = (long)provider;\r
+ jclass cls = env->GetObjectClass(jSyncListener);\r
+ if (!cls)\r
+ {\r
+ NS_LOGE ("Failed to Get ObjectClass for jSyncListener");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
+ }\r
+ jmethodID mid = env->GetMethodID(\r
+ cls,\r
+ "onSyncInfoReceived",\r
+ "(Lorg/iotivity/service/ns/common/SyncInfo;)V");\r
+ if (!mid)\r
+ {\r
+ NS_LOGE ("Failed to Get MethodID for onSyncInfoReceived");\r
+ if (JNI_EDETACHED == envRet)\r
+ {\r
+ g_jvm_consumer->DetachCurrentThread();\r
+ }\r
+ return ;\r
+ }\r
\r
- jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));\r
- if (!cls_provider)\r
+ env->CallVoidMethod(jSyncListener, mid, obj_syncInfo);\r
+\r
+ env->DeleteLocalRef(jSyncListener);\r
+ env->DeleteLocalRef(cls_SyncInfo);\r
+ if (JNI_EDETACHED == envRet)\r
{\r
- LOGE ("Failed to Get ObjectClass for Provider");\r
- return NULL;\r
+ g_jvm_consumer->DetachCurrentThread();\r
}\r
- jmethodID mid_provider = env->GetMethodID(\r
- cls_provider, "<init>", "(Ljava/lang/String;)V");\r
- if (!mid_provider)\r
+ NS_LOGD ("ConsumerService_onSyncInfoReceived - OUT");\r
+ return ;\r
+}\r
+\r
+JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStart\r
+(JNIEnv *env, jobject jObj, jobject jDiscoverListener)\r
+{\r
+ NS_LOGD ("ConsumerService_StartConsumer - IN");\r
+ if (!jDiscoverListener)\r
{\r
- LOGE ("Failed to Get MethodID for Provider<init>");\r
- return NULL;\r
+ ThrowNSException(JNI_INVALID_VALUE, "Listener cannot be null");\r
+ return;\r
+ }\r
+ if (g_obj_discoverListener != NULL)\r
+ {\r
+ env->DeleteGlobalRef(g_obj_discoverListener);\r
}\r
- jobject obj_provider = env->NewObject(cls_provider, mid_provider,\r
- jProviderId);\r
+ g_obj_discoverListener = (jobject) env->NewGlobalRef(jDiscoverListener);\r
\r
- jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");\r
- if (!nativeHandle)\r
+ OIC::Service::NSResult result = OIC::Service::NSConsumerService::getInstance()->start(\r
+ onDiscoverProvider);\r
+\r
+ if (result != OIC::Service::NSResult::OK)\r
{\r
- ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");\r
- return NULL;\r
+ ThrowNSException((int) result, "Fail to start ConsumerService");\r
+ return;\r
}\r
- env->SetLongField(obj_provider, nativeHandle, pProvider);\r
+ NS_LOGD ("ConsumerService_StartConsumer - OUT");\r
+ return;\r
\r
- env->DeleteLocalRef(cls_provider);\r
- env->ReleaseStringUTFChars(jProviderId, providerId);\r
+}\r
\r
- return obj_provider;\r
+JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStop\r
+(JNIEnv *env, jobject jObj)\r
+{\r
+ NS_LOGD ("ConsumerService_StopConsumer - IN");\r
+\r
+ env->DeleteGlobalRef(g_obj_postListener);\r
+ env->DeleteGlobalRef(g_obj_syncListener);\r
+ env->DeleteGlobalRef(g_obj_discoverListener);\r
+ env->DeleteGlobalRef(g_obj_acceptListener);\r
+ g_obj_postListener = NULL;\r
+ g_obj_syncListener = NULL;\r
+ g_obj_discoverListener = NULL;\r
+ g_obj_acceptListener = NULL;\r
+ OIC::Service::NSResult result = OIC::Service::NSConsumerService::getInstance()->stop();\r
+\r
+ if (result != OIC::Service::NSResult::OK)\r
+ {\r
+ ThrowNSException((int) result, "Fail to Stop ConsumerService");\r
+ return;\r
+ }\r
+ NS_LOGD ("ConsumerService_StopConsumer - OUT");\r
+ return;\r
}\r
\r
-OIC::Service::NSProvider *getNativeProvider(JNIEnv *env, jobject jObj)\r
+JNIEXPORT void JNICALL\r
+Java_org_iotivity_service_ns_consumer_ConsumerService_nativeEnableRemoteService\r
+(JNIEnv *env, jobject jObj, jstring jServerAddress)\r
{\r
- jclass providerClass = env->GetObjectClass(jObj);\r
- if (!providerClass)\r
+ NS_LOGD ("ConsumerService_EnableRemoteService - IN");\r
+ if (!jServerAddress)\r
{\r
- ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");\r
- return NULL;\r
+ ThrowNSException(JNI_INVALID_VALUE, "EnableRemoteService server address NULL");\r
+ return;\r
}\r
- jfieldID jproviderId = env->GetFieldID(providerClass, "mProviderId", "Ljava/lang/String;");\r
- if (!jproviderId)\r
+ const char *serverAddress = env->GetStringUTFChars(jServerAddress, 0);\r
+ OIC::Service::NSResult result =\r
+ OIC::Service::NSConsumerService::getInstance()->enableRemoteService(std::string(serverAddress));\r
+\r
+ if (result != OIC::Service::NSResult::OK)\r
{\r
- ThrowNSException(NS_ERROR, "Failed to get providerId for Provider");\r
- return NULL;\r
+ ThrowNSException((int) result, "Fail to EnableRemoteService");\r
+ return;\r
}\r
- jstring jprovider_id = (jstring) env->GetObjectField(jObj, jproviderId);\r
- if (!jprovider_id)\r
+ env->ReleaseStringUTFChars(jServerAddress, serverAddress);\r
+ NS_LOGD ("ConsumerService_EnableRemoteService - OUT");\r
+ return;\r
+}\r
+\r
+JNIEXPORT void JNICALL\r
+Java_org_iotivity_service_ns_consumer_ConsumerService_nativeSubscribeMQService\r
+(JNIEnv *env, jobject jObj, jstring jserverAddress, jstring jTopicName)\r
+{\r
+ NS_LOGD ("ConsumerService: nativeSubscribeMQService - IN");\r
+ if (!jserverAddress)\r
{\r
- ThrowNSException(NS_ERROR, "ProviderId cannot be null");\r
- return NULL;\r
+ ThrowNSException(JNI_INVALID_VALUE, "Server Address Can't be NULL");\r
+ return;\r
+ }\r
+ if (!jTopicName)\r
+ {\r
+ ThrowNSException(JNI_INVALID_VALUE, "TopicName Can't be NULL");\r
+ return;\r
}\r
\r
- const char *providerId = env->GetStringUTFChars(jprovider_id, 0);\r
- LOGD ("ProviderId : %s\n", providerId);\r
+ const char *address = env->GetStringUTFChars( jserverAddress, NULL);\r
+ std::string servAddress(address);\r
+ const char *topic = env->GetStringUTFChars( jTopicName, NULL);\r
+ std::string topicName(topic);\r
\r
- OIC::Service::NSProvider *provider =\r
- OIC::Service::NSConsumerService::getInstance()->getProvider(std::string(providerId));\r
- if (provider == nullptr)\r
+ OIC::Service::NSResult result =\r
+ OIC::Service::NSConsumerService::getInstance()->subscribeMQService(\r
+ servAddress, topicName);\r
+ if (result != OIC::Service::NSResult::OK)\r
{\r
- ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");\r
- return NULL;\r
+ ThrowNSException((int) result, "Fail to Subscribe to MQ Service");\r
+ return;\r
+ }\r
+ env->ReleaseStringUTFChars(jserverAddress, address);\r
+ env->ReleaseStringUTFChars(jTopicName, topic);\r
+ NS_LOGD ("ConsumerService: nativeSubscribeMQService - OUT");\r
+ return;\r
+}\r
+\r
+JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeRescanProvider\r
+(JNIEnv *env, jobject jObj)\r
+{\r
+ NS_LOGD ("ConsumerService_RescanProvider - IN");\r
+ OIC::Service::NSResult result = OIC::Service::NSConsumerService::getInstance()->rescanProvider();\r
+ if (result != OIC::Service::NSResult::OK)\r
+ {\r
+ ThrowNSException((int) result, "Fail to RescanProvider");\r
+ return;\r
}\r
- env->ReleaseStringUTFChars(jprovider_id, providerId);\r
- return provider;\r
+ NS_LOGD ("ConsumerService_RescanProvider - OUT");\r
+ return;\r
+\r
}\r
\r
JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSubscribe\r
(JNIEnv *env, jobject jObj)\r
{\r
- LOGD ("Provider_Subscribe");\r
+ NS_LOGD ("Provider_Subscribe -IN");\r
+ OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;\r
jclass providerClass = env->GetObjectClass(jObj);\r
if (!providerClass)\r
{\r
- ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
return ;\r
}\r
\r
jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
if (!nativeHandle)\r
{\r
- ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
return ;\r
}\r
jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
if (jProvider)\r
{\r
- LOGD ("calling subscribe on mNativeHandle");\r
- OIC::Service::NSProvider *provider = (OIC::Service::NSProvider *) (jProvider);\r
- provider->subscribe();\r
- }\r
- else\r
- {\r
- OIC::Service::NSProvider *provider = getNativeProvider(env, jObj);\r
- if (provider == nullptr)\r
+ NS_LOGD ("calling subscribe on mNativeHandle");\r
+ JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
+ reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
+ try\r
{\r
- ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");\r
+ result = objectHolder->get()->subscribe();\r
+ }\r
+ catch (OIC::Service::NSException ex)\r
+ {\r
+ ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
return;\r
}\r
- LOGD ("calling subscribe on ProviderID");\r
- provider->subscribe();\r
}\r
+ else\r
+ {\r
+ NS_LOGE ("Couldn't find Provider");\r
+ ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
+ }\r
+ if (result != OIC::Service::NSResult::OK)\r
+ {\r
+ ThrowNSException((int) result, "Fail to Subscribe Provider");\r
+ return;\r
+ }\r
+ NS_LOGD ("Provider_Subscribe -OUT");\r
+ return;\r
}\r
\r
JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeUnsubscribe\r
(JNIEnv *env, jobject jObj)\r
{\r
- LOGD ("Provider_Unsubscribe");\r
-\r
+ NS_LOGD ("Provider_UnSubscribe -IN");\r
+ OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;\r
jclass providerClass = env->GetObjectClass(jObj);\r
if (!providerClass)\r
{\r
- ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
return ;\r
}\r
\r
jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
if (!nativeHandle)\r
{\r
- ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
return ;\r
}\r
jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
if (jProvider)\r
{\r
- LOGD ("calling unSubscribe on mNativeHandle");\r
- OIC::Service::NSProvider *provider = (OIC::Service::NSProvider *) (jProvider);\r
- provider->unSubscribe();\r
- }\r
- else\r
- {\r
- OIC::Service::NSProvider *provider = getNativeProvider(env, jObj);\r
- if (provider == nullptr)\r
+ NS_LOGD ("calling subscribe on mNativeHandle");\r
+ JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
+ reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
+ try\r
+ {\r
+ result = objectHolder->get()->unsubscribe();\r
+ }\r
+ catch (OIC::Service::NSException ex)\r
{\r
- ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");\r
+ ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
return;\r
}\r
- LOGD ("calling unSubscribe on ProviderID");\r
- provider->unSubscribe();\r
}\r
+ else\r
+ {\r
+ NS_LOGE ("Couldn't find Provider");\r
+ ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
+ }\r
+ if (result != OIC::Service::NSResult::OK)\r
+ {\r
+ ThrowNSException((int) result, "Fail to UnSubscribe Provider");\r
+ return;\r
+ }\r
+ NS_LOGD ("Provider_UnSubscribe -OUT");\r
+ return;\r
}\r
\r
JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSendSyncInfo\r
(JNIEnv *env, jobject jObj, jlong jMessageId, jint jSyncType)\r
{\r
- LOGD ("Provider_SendSyncInfo");\r
+ NS_LOGD ("Provider_SendSyncInfo - IN");\r
+ OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;\r
if (!jMessageId)\r
{\r
- ThrowNSException(NS_ERROR, "MessageId cannot be 0");\r
+ ThrowNSException(JNI_INVALID_VALUE, "MessageId cannot be 0");\r
return ;\r
}\r
\r
jclass providerClass = env->GetObjectClass(jObj);\r
if (!providerClass)\r
{\r
- ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
return ;\r
}\r
\r
jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
if (!nativeHandle)\r
{\r
- ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
return ;\r
}\r
uint64_t messageId = (uint64_t) jMessageId;\r
\r
- LOGD("!!!!!!jMessageId: %lld", jMessageId);\r
- LOGD("!!!!!!messageId: %lld", messageId);\r
+ NS_LOGD ("!!!!!!jMessageId: %lld", jMessageId);\r
+ NS_LOGD ("!!!!!!messageId: %lld", messageId);\r
\r
jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
if (jProvider)\r
{\r
- LOGD ("calling SendSyncInfo on mNativeHandle");\r
- OIC::Service::NSProvider *provider = (OIC::Service::NSProvider *) (jProvider);\r
- provider->SendSyncInfo(messageId, (OIC::Service::NSSyncInfo::NSSyncType)jSyncType);\r
- }\r
- else\r
- {\r
- OIC::Service::NSProvider *provider = getNativeProvider(env, jObj);\r
- if (provider == nullptr)\r
+ NS_LOGD ("calling SendSyncInfo on mNativeHandle");\r
+ JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
+ reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
+ try\r
{\r
- ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");\r
+ result = objectHolder->get()->sendSyncInfo(messageId,\r
+ (OIC::Service::NSSyncInfo::NSSyncType)jSyncType);\r
+ }\r
+ catch (OIC::Service::NSException ex)\r
+ {\r
+ ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
return;\r
}\r
- LOGD ("calling SendSyncInfo on ProviderID");\r
- provider->SendSyncInfo(messageId, (OIC::Service::NSSyncInfo::NSSyncType)jSyncType);\r
}\r
+ else\r
+ {\r
+ NS_LOGE ("Couldn't find Provider");\r
+ ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
+ }\r
+ if (result != OIC::Service::NSResult::OK)\r
+ {\r
+ ThrowNSException((int) result, "Fail to Send sync info");\r
+ return;\r
+ }\r
+ NS_LOGD ("Provider_SendSyncInfo - OUT");\r
+ return;\r
}\r
\r
+\r
JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSetListener\r
-(JNIEnv *env, jobject jObj, jobject jPostListener, jobject jSyncListener)\r
+(JNIEnv *env, jobject jObj, jobject jAcceptListener, jobject jPostListener, jobject jSyncListener)\r
{\r
- LOGD ("Provider_SetListener");\r
- if (!jPostListener || !jSyncListener)\r
+ NS_LOGD ("Provider_SetListener - IN");\r
+ if (!jPostListener || !jSyncListener || !jAcceptListener)\r
{\r
- ThrowNSException(NS_ERROR, "Listener cannot be null");\r
+ ThrowNSException(JNI_INVALID_VALUE, "Listener cannot be null");\r
return ;\r
}\r
\r
jclass providerClass = env->GetObjectClass(jObj);\r
if (!providerClass)\r
{\r
- ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
return ;\r
}\r
\r
jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
if (!nativeHandle)\r
{\r
- ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
return ;\r
}\r
jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
if (jProvider)\r
{\r
- LOGD ("calling SetListener on mNativeHandle");\r
+ NS_LOGD ("calling SetListener on mNativeHandle");\r
+ if (g_obj_acceptListener != NULL)\r
+ {\r
+ env->DeleteGlobalRef(g_obj_acceptListener);\r
+ }\r
if (g_obj_postListener != NULL)\r
{\r
env->DeleteGlobalRef(g_obj_postListener);\r
{\r
env->DeleteGlobalRef(g_obj_syncListener);\r
}\r
- g_obj_syncListener = NULL;\r
- g_obj_acceptListener = NULL;\r
+ g_obj_acceptListener = (jobject) env->NewGlobalRef(jAcceptListener);\r
g_obj_postListener = (jobject) env->NewGlobalRef(jPostListener);\r
g_obj_syncListener = (jobject) env->NewGlobalRef(jSyncListener);\r
\r
- OIC::Service::NSProvider *provider = (OIC::Service::NSProvider *) (jProvider);\r
- provider->setListener(onMessagePosted, onSyncInfoReceived);\r
+ JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
+ reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
+ objectHolder->get()->setListener(onProviderState, onMessagePosted, onSyncInfoReceived);\r
+ }\r
+ else\r
+ {\r
+ NS_LOGE ("Couldn't find Provider");\r
+ ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
+ }\r
+ NS_LOGD ("Provider_SetListener - OUT");\r
+ return;\r
+}\r
+\r
+JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeGetTopicList\r
+(JNIEnv *env, jobject jObj)\r
+{\r
+ NS_LOGD ("Provider_nativeGetTopicList - IN");\r
+ jclass providerClass = env->GetObjectClass(jObj);\r
+ if (!providerClass)\r
+ {\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
+ return NULL;\r
+ }\r
+\r
+ jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
+ if (!nativeHandle)\r
+ {\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
+ return NULL;\r
+ }\r
+ jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
+ std::shared_ptr<OIC::Service::NSTopicsList> topicList = nullptr;\r
+ if (jProvider)\r
+ {\r
+ NS_LOGD ("calling subscribe on mNativeHandle");\r
+ JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
+ reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
+ try\r
+ {\r
+ topicList = objectHolder->get()->getTopicList();\r
+ }\r
+ catch (OIC::Service::NSException ex)\r
+ {\r
+ ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
+ return NULL;\r
+ }\r
}\r
else\r
{\r
- OIC::Service::NSProvider *provider = getNativeProvider(env, jObj);\r
- if (provider == nullptr)\r
+ NS_LOGE ("Couldn't find Provider");\r
+ ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
+ }\r
+ if (topicList == nullptr)\r
+ {\r
+ ThrowNSException(JNI_INVALID_VALUE, "Topic List doesn't exist");\r
+ return NULL;\r
+ }\r
+\r
+ jobject obj_topicList = getJavaTopicsList(env, topicList);\r
+\r
+ NS_LOGD ("Provider_nativeGetTopicList - OUT");\r
+ return obj_topicList;\r
+}\r
+\r
+JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeUpdateTopicList\r
+(JNIEnv *env, jobject jObj, jobject jTopicsList)\r
+{\r
+ NS_LOGD ("Provider_nativeUpdateTopicList -IN");\r
+ if (!jTopicsList)\r
+ {\r
+ ThrowNSException(JNI_INVALID_VALUE, "TopicList cannot be null");\r
+ return;\r
+ }\r
+ std::shared_ptr<OIC::Service::NSTopicsList> nsTopicsList = getNativeTopicsList(env, jTopicsList);\r
+ if (nsTopicsList == nullptr)\r
+ {\r
+ ThrowNSException(JNI_INVALID_VALUE, "NSTopicList cannot be created ");\r
+ return;\r
+ }\r
+\r
+ jclass providerClass = env->GetObjectClass(jObj);\r
+ if (!providerClass)\r
+ {\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
+ return;\r
+ }\r
+\r
+ jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
+ if (!nativeHandle)\r
+ {\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
+ return;\r
+ }\r
+ jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
+ OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;\r
+ if (jProvider)\r
+ {\r
+ NS_LOGD ("calling subscribe on mNativeHandle");\r
+ JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
+ reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
+ try\r
+ {\r
+ result = objectHolder->get()->updateTopicList(nsTopicsList);\r
+ }\r
+ catch (OIC::Service::NSException ex)\r
{\r
- ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");\r
+ ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
return;\r
}\r
- LOGD ("calling SetListener on ProviderID");\r
- if (g_obj_postListener != NULL)\r
+ }\r
+ else\r
+ {\r
+ NS_LOGE ("Couldn't find Provider");\r
+ ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
+ }\r
+ if (result != OIC::Service::NSResult::OK)\r
+ {\r
+ ThrowNSException((int) result, "Fail to Update Interest Topics");\r
+ return;\r
+ }\r
+ NS_LOGD ("Provider_nativeUpdateTopicList -OUT");\r
+ return;\r
+}\r
+\r
+JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeGetProviderState\r
+(JNIEnv *env, jobject jObj)\r
+{\r
+ NS_LOGD ("Provider_nativeGetProviderState - IN");\r
+ jclass providerClass = env->GetObjectClass(jObj);\r
+ if (!providerClass)\r
+ {\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
+ return NULL;\r
+ }\r
+\r
+ jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
+ if (!nativeHandle)\r
+ {\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
+ return NULL;\r
+ }\r
+ jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
+ OIC::Service::NSProviderState state = OIC::Service::NSProviderState::DENY;\r
+ if (jProvider)\r
+ {\r
+ NS_LOGD ("calling getProviderState on mNativeHandle");\r
+ JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
+ reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
+ try\r
{\r
- env->DeleteGlobalRef(g_obj_postListener);\r
+ state = objectHolder->get()->getProviderState();\r
}\r
- if (g_obj_syncListener != NULL)\r
+ catch (OIC::Service::NSException ex)\r
{\r
- env->DeleteGlobalRef(g_obj_syncListener);\r
+ ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
+ return NULL;\r
}\r
- g_obj_syncListener = NULL;\r
- g_obj_acceptListener = NULL;\r
- g_obj_postListener = (jobject) env->NewGlobalRef(jPostListener);\r
- g_obj_syncListener = (jobject) env->NewGlobalRef(jSyncListener);\r
+ }\r
+ else\r
+ {\r
+ NS_LOGE ("Couldn't find Provider");\r
+ ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
+ }\r
+ jobject obj_state = getJavaProviderState(env, state);\r
\r
- provider->setListener(onMessagePosted, onSyncInfoReceived);\r
+ NS_LOGD ("Provider_nativeGetProviderState - OUT");\r
+ return obj_state;\r
+}\r
+\r
+JNIEXPORT jboolean JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeIsSubscribed\r
+(JNIEnv *env, jobject jObj)\r
+{\r
+ NS_LOGD ("nativeIsSubscribed - IN");\r
+ jclass providerClass = env->GetObjectClass(jObj);\r
+ if (!providerClass)\r
+ {\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
+ return (jboolean)false;\r
+ }\r
+\r
+ jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
+ if (!nativeHandle)\r
+ {\r
+ ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
+ return (jboolean)false;\r
+ }\r
+ jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
+ if (jProvider)\r
+ {\r
+ NS_LOGD ("calling isSubscribe on mNativeHandle");\r
+ JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
+ reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
+ try\r
+ {\r
+ return (jboolean) objectHolder->get()->isSubscribed();\r
+ }\r
+ catch (OIC::Service::NSException ex)\r
+ {\r
+ ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
+ return (jboolean)false;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ NS_LOGE ("Couldn't find Provider");\r
+ ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
+ }\r
+}\r
+\r
+JNIEXPORT void JNICALL\r
+Java_org_iotivity_service_ns_consumer_Provider_nativeDispose\r
+(JNIEnv *env, jobject object)\r
+{\r
+ jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));\r
+ if (!cls_provider)\r
+ {\r
+ NS_LOGE ("Failed to Get ObjectClass for Provider");\r
+ return;\r
+ }\r
+ jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");\r
+ if (!nativeHandle)\r
+ {\r
+ NS_LOGE ("Failed to get nativeHandle for Provider");\r
+ return;\r
}\r
+ jlong handle = env->GetLongField(object, nativeHandle);\r
+ JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
+ reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(handle);\r
+ delete objectHolder;\r
+ return;\r
}\r
\r
// JNI OnLoad\r
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)\r
{\r
- LOGD("ConsumerService_JNI_OnLoad");\r
- g_jvm = jvm;\r
+ NS_LOGD ("ConsumerService_JNI_OnLoad");\r
+ g_jvm_consumer = jvm;\r
\r
- JNIEnv *env;\r
+ JNIEnv *env = NULL;\r
if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)\r
{\r
- LOGE("Failed to get the environment using GetEnv()");\r
+ NS_LOGE ("Failed to get the environment using GetEnv()");\r
return JNI_ERR;\r
}\r
\r
"org/iotivity/service/ns/common/Message");\r
if (!localMessage)\r
{\r
- LOGE("Failed to get local Message class");\r
+ NS_LOGE ("Failed to get local Message class");\r
return JNI_ERR;\r
}\r
g_cls_Message = (jclass) (env->NewGlobalRef(localMessage));\r
if (!g_cls_Message)\r
{\r
- LOGE("Failed to set Global Message reference");\r
+ NS_LOGE ("Failed to set Global Message reference");\r
return JNI_ERR;\r
}\r
\r
"org/iotivity/service/ns/consumer/Provider");\r
if (!localProvider)\r
{\r
- LOGE("Failed to get local Provider class");\r
+ NS_LOGE ("Failed to get local Provider class");\r
return JNI_ERR;\r
}\r
g_cls_Provider = (jclass) (env->NewGlobalRef(localProvider));\r
if (!g_cls_Provider)\r
{\r
- LOGE("Failed to set Global Provider reference");\r
+ NS_LOGE ("Failed to set Global Provider reference");\r
return JNI_ERR;\r
}\r
\r
"org/iotivity/service/ns/common/SyncInfo");\r
if (!localSyncInfo)\r
{\r
- LOGE("Failed to get local SyncInfo class");\r
+ NS_LOGE ("Failed to get local SyncInfo class");\r
return JNI_ERR;\r
}\r
g_cls_SyncInfo = (jclass) (env->NewGlobalRef(localSyncInfo));\r
if (!g_cls_SyncInfo)\r
{\r
- LOGE("Failed to set Global NSSyncInfo reference");\r
+ NS_LOGE ("Failed to set Global NSSyncInfo reference");\r
+ return JNI_ERR;\r
+ }\r
+\r
+ jclass localSyncType = env->FindClass(\r
+ "org/iotivity/service/ns/common/SyncInfo$SyncType");\r
+ if (!localSyncType)\r
+ {\r
+ NS_LOGE ("Failed to get local SyncType enum");\r
+ return JNI_ERR;\r
+ }\r
+ g_cls_SyncType = (jclass) (env->NewGlobalRef(localSyncType));\r
+ if (!g_cls_SyncType)\r
+ {\r
+ NS_LOGE ("Failed to set Global SyncType reference");\r
return JNI_ERR;\r
}\r
\r
"org/iotivity/service/ns/common/MediaContents");\r
if (!localMediaContents)\r
{\r
- LOGE("Failed to get local MediaContents class");\r
+ NS_LOGE ("Failed to get local MediaContents class");\r
return JNI_ERR;\r
}\r
g_cls_MediaContents = (jclass) (env->NewGlobalRef(localMediaContents));\r
if (!g_cls_MediaContents)\r
{\r
- LOGE("Failed to set Global MediaContents reference");\r
+ NS_LOGE ("Failed to set Global MediaContents reference");\r
+ return JNI_ERR;\r
+ }\r
+ jclass localTopicState = env->FindClass(\r
+ "org/iotivity/service/ns/common/Topic$TopicState");\r
+ if (!localTopicState)\r
+ {\r
+ NS_LOGE ("Failed to get local TopicState enum");\r
+ return JNI_ERR;\r
+ }\r
+ g_cls_TopicState = (jclass) (env->NewGlobalRef(localTopicState));\r
+ if (!g_cls_TopicState)\r
+ {\r
+ NS_LOGE ("Failed to set Global TopicState reference");\r
+ return JNI_ERR;\r
+ }\r
+\r
+ jclass localTopic = env->FindClass(\r
+ "org/iotivity/service/ns/common/Topic");\r
+ if (!localTopic)\r
+ {\r
+ NS_LOGE ("Failed to get local TopicState enum");\r
+ return JNI_ERR;\r
+ }\r
+ g_cls_Topic = (jclass) (env->NewGlobalRef(localTopic));\r
+ if (!g_cls_Topic)\r
+ {\r
+ NS_LOGE ("Failed to set Global Topic reference");\r
+ return JNI_ERR;\r
+ }\r
+\r
+ jclass localMessageType = env->FindClass(\r
+ "org/iotivity/service/ns/common/Message$MessageType");\r
+ if (!localMessageType)\r
+ {\r
+ NS_LOGE ("Failed to get local Message Type class");\r
+ return JNI_ERR;\r
+ }\r
+ g_cls_Message_Type = (jclass) (env->NewGlobalRef(localMessageType));\r
+ if (!g_cls_Message_Type)\r
+ {\r
+ NS_LOGE ("Failed to set Global Message Type reference");\r
+ return JNI_ERR;\r
+ }\r
+\r
+ jclass localProviderState = env->FindClass(\r
+ "org/iotivity/service/ns/consumer/Provider$ProviderState");\r
+ if (!localProviderState)\r
+ {\r
+ NS_LOGE ("Failed to get localProviderState Type class");\r
+ return JNI_ERR;\r
+ }\r
+ g_cls_ProviderState = (jclass) (env->NewGlobalRef(localProviderState));\r
+ if (!g_cls_ProviderState)\r
+ {\r
+ NS_LOGE ("Failed to set Global ProviderState Type reference");\r
+ return JNI_ERR;\r
+ }\r
+\r
+ jclass localTopicsList = env->FindClass(\r
+ "org/iotivity/service/ns/common/TopicsList");\r
+ if (!localTopicsList)\r
+ {\r
+ NS_LOGE ("Failed to get local Topic class");\r
+ return JNI_ERR;\r
+ }\r
+ g_cls_TopicsList = (jclass) (env->NewGlobalRef(localTopicsList));\r
+ if (!g_cls_TopicsList)\r
+ {\r
+ NS_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
+ NS_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
+ NS_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
+ NS_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(localSyncType);\r
env->DeleteLocalRef(localMediaContents);\r
+ env->DeleteLocalRef(localTopicState);\r
+ env->DeleteLocalRef(localMessageType);\r
+ env->DeleteLocalRef(localProviderState);\r
+ env->DeleteLocalRef(localTopic);\r
+ env->DeleteLocalRef(localTopicsList);\r
+ env->DeleteLocalRef(localOcRepresentation);\r
\r
return NSExceptionInit(env);\r
}\r
\r
JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved)\r
{\r
- LOGI("ConsumerService_JNI_OnUnload");\r
- JNIEnv *env;\r
+ NS_LOGI ("ConsumerService_JNI_OnUnload");\r
+ JNIEnv *env = NULL;\r
\r
if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)\r
{\r
- LOGE("Failed to get the environment using GetEnv()");\r
+ NS_LOGE ("Failed to get the environment using GetEnv()");\r
return ;\r
}\r
\r
env->DeleteGlobalRef(g_cls_Message);\r
env->DeleteGlobalRef(g_cls_Provider);\r
env->DeleteGlobalRef(g_cls_SyncInfo);\r
+ env->DeleteGlobalRef(g_cls_SyncType);\r
env->DeleteGlobalRef(g_cls_MediaContents);\r
+ env->DeleteGlobalRef(g_cls_TopicState);\r
+ env->DeleteGlobalRef(g_cls_Message_Type);\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