1 //******************************************************************
\r
3 // Copyright 2016 Samsung Electronics All Rights Reserved.
\r
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
7 // Licensed under the Apache License, Version 2.0 (the "License");
\r
8 // you may not use this file except in compliance with the License.
\r
9 // You may obtain a copy of the License at
\r
11 // http://www.apache.org/licenses/LICENSE-2.0
\r
13 // Unless required by applicable law or agreed to in writing, software
\r
14 // distributed under the License is distributed on an "AS IS" BASIS,
\r
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 // See the License for the specific language governing permissions and
\r
17 // limitations under the License.
\r
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
21 #include "JniNotificationConsumer.h"
\r
22 #include "NSConsumerService.h"
\r
23 #include "NSException.h"
\r
24 #include "JniOcRepresentation.h"
\r
26 static JavaVM *g_jvm_consumer = NULL;
\r
28 static jobject g_obj_postListener = NULL;
\r
29 static jobject g_obj_syncListener = NULL;
\r
30 static jobject g_obj_discoverListener = NULL;
\r
31 static jobject g_obj_acceptListener = NULL;
\r
33 jclass g_cls_Message;
\r
34 jclass g_cls_Provider;
\r
35 jclass g_cls_SyncInfo;
\r
36 jclass g_cls_SyncType;
\r
37 jclass g_cls_MediaContents;
\r
38 jclass g_cls_TopicState;
\r
39 jclass g_cls_Message_Type;
\r
40 jclass g_cls_ProviderState;
\r
42 jclass g_cls_TopicsList;
\r
43 jclass g_cls_OcRepresentation;
\r
44 jmethodID g_mid_OcRepresentation_N_ctor_bool = NULL;
\r
46 static JNIEnv *GetJNIEnv(jint *ret)
\r
50 *ret = g_jvm_consumer->GetEnv((void **) &env, JNI_CURRENT_VERSION);
\r
56 if (g_jvm_consumer->AttachCurrentThread(&env, NULL) != JNI_OK)
\r
58 NS_LOGE ("Failed to get the environment");
\r
66 NS_LOGE ("JNI version is not supported");
\r
69 NS_LOGE ("Failed to get the environment");
\r
74 jobject getJavaProviderState(JNIEnv *env, OIC::Service::NSProviderState state)
\r
76 NS_LOGD ("ConsumerService_getJavaProviderState - IN");
\r
77 jobject providerState = NULL;
\r
80 case OIC::Service::NSProviderState::ALLOW:
\r
82 static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,
\r
83 "ALLOW", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");
\r
84 providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);
\r
87 case OIC::Service::NSProviderState::DENY:
\r
89 static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,
\r
90 "DENY", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");
\r
91 providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);
\r
94 case OIC::Service::NSProviderState::TOPIC:
\r
96 static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,
\r
97 "TOPIC", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");
\r
98 providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);
\r
101 case OIC::Service::NSProviderState::STOPPED:
\r
103 static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,
\r
104 "STOPPED", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");
\r
105 providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);
\r
110 providerState = NULL;
\r
114 NS_LOGD ("ConsumerService_getJavaProviderState - OUT");
\r
115 return providerState;
\r
118 jobject getJavaSyncType(JNIEnv *env, OIC::Service::NSSyncInfo::NSSyncType nsType)
\r
120 NS_LOGD ("ConsumerService_getJavaSyncType - IN");
\r
123 jclass cls_SyncType = (jclass) (env->NewLocalRef(g_cls_SyncType));
\r
126 NS_LOGE ("Failed to Get ObjectClass for SyncType");
\r
129 jobject syncType = NULL;
\r
132 case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_UNREAD:
\r
134 static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,
\r
135 "UNREAD", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");
\r
136 syncType = env->GetStaticObjectField(cls_SyncType, fieldID);
\r
139 case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ :
\r
141 static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,
\r
142 "READ", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");
\r
143 syncType = env->GetStaticObjectField(cls_SyncType, fieldID);
\r
146 case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_DELETED :
\r
148 static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,
\r
149 "DELETED", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");
\r
150 syncType = env->GetStaticObjectField(cls_SyncType, fieldID);
\r
160 NS_LOGD ("ConsumerService_getJavaSyncType - OUT");
\r
164 jobject getJavaTopicState(JNIEnv *env, OIC::Service::NSTopic::NSTopicState nsState)
\r
166 NS_LOGD ("ConsumerService_getJavaTopicState - IN");
\r
169 jclass cls_topicState = (jclass) (env->NewLocalRef(g_cls_TopicState));
\r
170 if (!cls_topicState)
\r
172 NS_LOGE ("Failed to Get ObjectClass for TopicState Type");
\r
175 jobject topicState = NULL;
\r
179 case OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED:
\r
181 static jfieldID fieldID = env->GetStaticFieldID(cls_topicState,
\r
182 "UNSUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;");
\r
183 topicState = env->GetStaticObjectField(cls_topicState, fieldID);
\r
186 case OIC::Service::NSTopic::NSTopicState::SUBSCRIBED:
\r
188 static jfieldID fieldID = env->GetStaticFieldID(cls_topicState,
\r
189 "SUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;");
\r
190 topicState = env->GetStaticObjectField(cls_topicState, fieldID);
\r
200 NS_LOGD ("ConsumerService_getJavaTopicState - OUT");
\r
204 jobject getJavaTopicsList(JNIEnv *env, std::shared_ptr<OIC::Service::NSTopicsList> topicList)
\r
206 NS_LOGD ("ConsumerService_getJavaTopicsList - IN");
\r
207 jclass cls_topicList = (jclass) (env->NewLocalRef(g_cls_TopicsList));
\r
208 if (!cls_topicList)
\r
210 NS_LOGE ("Failed to Get ObjectClass for TopicsList");
\r
213 jmethodID mid_topicList = env->GetMethodID(cls_topicList, "<init>", "()V");
\r
214 if (!mid_topicList)
\r
216 NS_LOGE ("Failed to Get MethodID for TopicsList<init>");
\r
219 jobject obj_topicList = env->NewObject(cls_topicList, mid_topicList);
\r
220 if (!obj_topicList)
\r
222 NS_LOGE ("Failed to Get object for TopicsList");
\r
225 jmethodID mid_addTopic = env->GetMethodID(cls_topicList, "addTopic",
\r
226 "(Ljava/lang/String;Lorg/iotivity/service/ns/common/Topic$TopicState;)V");
\r
229 NS_LOGE ("Failed to Get MethodID for addTopic");
\r
232 for (auto it : topicList->getTopicsList())
\r
234 jobject jState = getJavaTopicState(env, it.getState());
\r
235 std::string topicName = it.getTopicName();
\r
236 jstring jTopicName = env->NewStringUTF(topicName.c_str());
\r
237 env->CallVoidMethod(obj_topicList, mid_addTopic, jTopicName, jState);
\r
239 env->DeleteLocalRef(cls_topicList);
\r
240 NS_LOGD ("ConsumerService_getJavaTopicsList - OUT");
\r
241 return obj_topicList;
\r
244 bool getNativeTopicState(JNIEnv *env, jobject jTopic , OIC::Service::NSTopic::NSTopicState &state )
\r
246 NS_LOGD ("ConsumerService_getNativeTopicState - IN");
\r
248 jclass cls_topic = env->GetObjectClass( jTopic);
\r
250 jclass cls_TopicState = (jclass) (env->NewLocalRef(g_cls_TopicState));
\r
251 if (!cls_TopicState)
\r
253 NS_LOGE ("Failed to Get ObjectClass for cls_TopicState Type");
\r
256 jmethodID mid = env->GetMethodID(cls_TopicState, "ordinal", "()I");
\r
257 jfieldID fid_state = env->GetFieldID( cls_topic, "mState",
\r
258 "Lorg/iotivity/service/ns/common/Topic$TopicState;");
\r
259 if (fid_state == NULL)
\r
261 NS_LOGE ("Error: jfieldID for state type is null");
\r
264 jobject jobj = env->GetObjectField( jTopic, fid_state);
\r
267 NS_LOGE ("Error: object of field state Type is null");
\r
270 jint jState = env->CallIntMethod(jobj, mid);
\r
271 state = (OIC::Service::NSTopic::NSTopicState) jState;
\r
272 NS_LOGD ("ConsumerService_getNativeTopicState - OUT");
\r
277 const char *getNativeTopicName(JNIEnv *env, jobject jTopic)
\r
279 NS_LOGD ("ConsumerService_getNativeTopicName - IN");
\r
280 jclass cls_topic = env->GetObjectClass( jTopic);
\r
281 if (cls_topic == NULL)
\r
283 NS_LOGE ("Error: Class for Topic is null");
\r
286 jfieldID fid_name = env->GetFieldID( cls_topic, "mTopicName", "Ljava/lang/String;");
\r
287 if (fid_name == NULL)
\r
289 NS_LOGE ("Error: jfieldID for Topic Name is null");
\r
292 jstring jTopicName = (jstring) env->GetObjectField( jTopic, fid_name);
\r
293 const char *topicName = NULL;
\r
296 topicName = env->GetStringUTFChars( jTopicName, NULL);
\r
300 NS_LOGI (TAG, "Info: topicName is null");
\r
302 NS_LOGD ("ConsumerService_getNativeTopicName - OUT");
\r
307 std::shared_ptr<OIC::Service::NSTopicsList> getNativeTopicsList(JNIEnv *env, jobject jTopicList)
\r
309 NS_LOGD ("ConsumerService_getNativeTopicsList - IN");
\r
311 jclass cls_topicList = env->GetObjectClass( jTopicList);
\r
312 if (cls_topicList == NULL)
\r
314 NS_LOGE ("Error: Class for Topic List is null");
\r
317 jfieldID fid_list = env->GetFieldID( cls_topicList, "mTopicsList", "Ljava/util/Vector;");
\r
318 if (fid_list == NULL)
\r
320 NS_LOGE ("Error: jfieldID for Topic List is null");
\r
323 jobject jobj = env->GetObjectField( jTopicList, fid_list);
\r
326 NS_LOGE ("Error: object of field Topic List is null");
\r
329 jclass cls_vec = env->FindClass("java/util/Vector");
\r
330 if (cls_vec == NULL)
\r
332 NS_LOGE ("Error: Class for Vector not found");
\r
335 jmethodID sizeMethod = env->GetMethodID(cls_vec, "size", "()I");
\r
336 if (sizeMethod == NULL)
\r
338 NS_LOGE ("Error: MethodId for Vector Size not found");
\r
341 int size = env->CallIntMethod(jobj, sizeMethod);
\r
342 jmethodID getMethod = env->GetMethodID(cls_vec, "get", "(I)Ljava/lang/Object;");
\r
343 if (getMethod == NULL)
\r
345 NS_LOGE ("Error: MethodId for Vector get not found");
\r
348 std::shared_ptr<OIC::Service::NSTopicsList> nsTopicList =
\r
349 std::make_shared<OIC::Service::NSTopicsList>();
\r
350 for (int index = 0; index < size; index++)
\r
352 jobject topicObj = env->CallObjectMethod(jobj, getMethod, index);
\r
353 if (topicObj == NULL)
\r
355 NS_LOGE ("Error: object of field Topic is null");
\r
358 const char *name = getNativeTopicName(env, topicObj);
\r
359 if (name == nullptr)
\r
361 NS_LOGE ("Error: Couldn't find topic Name");
\r
364 std::string topicName(name);
\r
365 OIC::Service::NSTopic::NSTopicState state = OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED;
\r
366 if (!getNativeTopicState(env, topicObj, state))
\r
370 nsTopicList->addTopic(topicName, state);
\r
373 env->DeleteLocalRef(cls_vec);
\r
374 env->DeleteLocalRef(cls_topicList);
\r
375 NS_LOGD ("ConsumerService_getNativeTopicsList - OUT");
\r
376 return nsTopicList;
\r
379 jobject getJavaProvider(JNIEnv *env, std::shared_ptr<OIC::Service::NSProvider> provider)
\r
381 NS_LOGD ("ConsumerService_getJavaProvider - IN");
\r
382 NS_LOGD ("ProviderId : %s\n", provider->getProviderId().c_str());
\r
384 jstring jProviderId = env->NewStringUTF(provider->getProviderId().c_str());
\r
385 auto *objectHolder = JniSharedObjectHolder<OIC::Service::NSProvider>::create(provider);
\r
388 NS_LOGE ("Failed to create new Object Holder for Provider");
\r
391 jlong pProvider = (long)objectHolder;
\r
393 jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));
\r
396 NS_LOGE ("Failed to Get ObjectClass for Provider");
\r
399 jmethodID mid_provider = env->GetMethodID(
\r
400 cls_provider, "<init>", "(Ljava/lang/String;)V");
\r
403 NS_LOGE ("Failed to Get MethodID for Provider<init>");
\r
406 jobject obj_provider = env->NewObject(cls_provider, mid_provider, jProviderId);
\r
409 NS_LOGE ("Failed to create new Object for Provider");
\r
413 jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");
\r
416 NS_LOGE ("Failed to get nativeHandle for Provider");
\r
419 env->SetLongField(obj_provider, nativeHandle, pProvider);
\r
421 env->DeleteLocalRef(cls_provider);
\r
422 NS_LOGD ("ConsumerService_getJavaProvider - OUT");
\r
423 return obj_provider;
\r
426 jobject getJavaMessageType(JNIEnv *env, OIC::Service::NSMessage::NSMessageType type)
\r
428 NS_LOGD ("ConsumerService_getJavaMessageType - IN");
\r
429 jobject messageType = NULL;
\r
432 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_ALERT:
\r
434 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,
\r
435 "ALERT", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
436 messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);
\r
439 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_NOTICE:
\r
441 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,
\r
442 "NOTICE", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
443 messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);
\r
446 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_EVENT:
\r
448 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,
\r
449 "EVENT", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
450 messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);
\r
453 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_INFO:
\r
455 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,
\r
456 "INFO", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
457 messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);
\r
462 messageType = NULL;
\r
466 NS_LOGD ("ConsumerService_getJavaMessageType - OUT");
\r
467 return messageType;
\r
470 jobject getJavaMessage(JNIEnv *env, OIC::Service::NSMessage message)
\r
472 NS_LOGD ("ConsumerService_getJavaMessage - IN");
\r
474 NS_LOGD ("id : %llu\n", message.getMessageId());
\r
475 NS_LOGD ("title : %s\n", message.getTitle().c_str());
\r
476 NS_LOGD ("content : %s\n", message.getContentText().c_str());
\r
477 NS_LOGD ("source : %s\n", message.getSourceName().c_str());
\r
479 jlong jMessageId = (jlong) message.getMessageId();
\r
480 jstring jProviderId = env->NewStringUTF(message.getProviderId().c_str());
\r
481 jstring jTitle = env->NewStringUTF(message.getTitle().c_str());
\r
482 jstring jContentText = env->NewStringUTF(message.getContentText().c_str());
\r
483 jstring jSourceName = env->NewStringUTF(message.getSourceName().c_str());
\r
484 jstring jTopic = env->NewStringUTF(message.getTopic().c_str());
\r
486 jstring jTime = env->NewStringUTF(message.getTime().c_str());
\r
487 jlong jTTL = (jlong) message.getTTL();
\r
489 jclass cls_message = (jclass) (env->NewLocalRef(g_cls_Message));
\r
492 NS_LOGE ("Failed to Get ObjectClass for Message");
\r
495 jmethodID mid_message = env->GetMethodID(
\r
496 cls_message, "<init>",
\r
497 "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
\r
500 NS_LOGE ("Failed to Get MethodID for Message<init>");
\r
503 jobject obj_message = env->NewObject(cls_message, mid_message,
\r
504 jTitle, jContentText, jSourceName);
\r
507 NS_LOGE ("Failed to Get Java Object for Message");
\r
511 jfieldID fid_messageId = env->GetFieldID(cls_message, "mMessageId", "J");
\r
512 if (!fid_messageId)
\r
514 NS_LOGE ("Failed to get field MessageID for Message");
\r
517 env->SetLongField(obj_message, fid_messageId, jMessageId);
\r
519 jfieldID fid_providerId = env->GetFieldID(cls_message, "mProviderId", "Ljava/lang/String;");
\r
520 if (!fid_providerId)
\r
522 NS_LOGE ("Failed to get field ProviderID for Message");
\r
525 env->SetObjectField(obj_message, fid_providerId, jProviderId);
\r
527 jfieldID fid_time = env->GetFieldID(cls_message, "mTime", "Ljava/lang/String;");
\r
530 NS_LOGE ("Failed to get field Time for Message");
\r
533 env->SetObjectField(obj_message, fid_time, jTime);
\r
535 jfieldID fid_ttl = env->GetFieldID(cls_message, "mTTL", "J");
\r
538 NS_LOGE ("Failed to get field TTL for Message");
\r
541 env->SetLongField(obj_message, fid_ttl, jTTL);
\r
543 jfieldID fid_topic = env->GetFieldID(cls_message, "mTopic", "Ljava/lang/String;");
\r
546 NS_LOGE ("Failed to get mTopic for Message");
\r
549 env->SetObjectField(obj_message, fid_topic, jTopic);
\r
551 OIC::Service::NSMediaContents *mediaCont = message.getMediaContents();
\r
552 if (mediaCont != nullptr)
\r
554 jstring jIconImage = env->NewStringUTF(mediaCont->getIconImage().c_str());
\r
555 jclass cls_mediaContents = (jclass) (env->NewLocalRef(g_cls_MediaContents));
\r
556 if (!cls_mediaContents)
\r
558 NS_LOGE ("Failed to Get ObjectClass for MediaContents");
\r
561 jmethodID mid_mediaContents = env->GetMethodID(
\r
562 cls_mediaContents, "<init>", "(Ljava/lang/String;)V");
\r
563 if (!mid_mediaContents)
\r
565 NS_LOGE ("Failed to Get MethodID for MediaContents<init>");
\r
568 jobject obj_mediaContents = env->NewObject(cls_mediaContents, mid_mediaContents,
\r
571 jfieldID fid_mediaContents = env->GetFieldID(cls_message, "mMediaContents",
\r
572 "Lorg/iotivity/service/ns/common/MediaContents;");
\r
573 if (!fid_mediaContents)
\r
575 NS_LOGE ("Failed to get field mediaContents for Message");
\r
578 env->SetObjectField(obj_message, fid_mediaContents, obj_mediaContents);
\r
582 jobject jType = getJavaMessageType(env, message.getType());
\r
585 jfieldID fid_type = env->GetFieldID(cls_message, "mType",
\r
586 "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
589 NS_LOGE ("Failed to get field Type for Message");
\r
592 env->SetObjectField(obj_message, fid_type, jType);
\r
595 NS_LOGD ("Reading OCRepresentation Object from Native");
\r
597 OC::OCRepresentation *ocRepresentation = new OC::OCRepresentation(message.getExtraInfo());
\r
598 jlong handle = reinterpret_cast<jlong>(ocRepresentation);
\r
599 jobject jRepresentation = env->NewObject(g_cls_OcRepresentation, g_mid_OcRepresentation_N_ctor_bool,
\r
601 if (!jRepresentation)
\r
603 NS_LOGE ("Failed to create OcRepresentation");
\r
604 delete ocRepresentation;
\r
608 NS_LOGD ("Created OCRepresentation Object from Native");
\r
610 jfieldID fid_extraInfo = env->GetFieldID(cls_message, "mExtraInfo",
\r
611 "Lorg/iotivity/base/OcRepresentation;");
\r
612 if (!fid_extraInfo)
\r
614 NS_LOGE ("Failed to get mExtraInfo for Message");
\r
615 delete ocRepresentation;
\r
618 NS_LOGD ("setting extraInfo field");
\r
619 env->SetObjectField(obj_message, fid_extraInfo, jRepresentation);
\r
621 env->DeleteLocalRef(cls_message);
\r
622 NS_LOGD ("ConsumerService_getJavaMessage - OUT");
\r
623 return obj_message;
\r
626 void onDiscoverProvider(std::shared_ptr<OIC::Service::NSProvider> provider)
\r
628 NS_LOGD ("ConsumerService_onDiscoverProvider - IN");
\r
631 JNIEnv *env = GetJNIEnv(&envRet);
\r
637 jobject jDiscoverListener = (jobject) env->NewLocalRef(g_obj_discoverListener);
\r
638 if (!jDiscoverListener)
\r
640 NS_LOGE ("Failed to Get jDiscoverListener");
\r
641 if (JNI_EDETACHED == envRet)
\r
643 g_jvm_consumer->DetachCurrentThread();
\r
648 jobject obj_provider = getJavaProvider(env, provider);
\r
651 NS_LOGE ("Failed to Get Provider Object");
\r
652 if (JNI_EDETACHED == envRet)
\r
654 g_jvm_consumer->DetachCurrentThread();
\r
659 jclass cls = env->GetObjectClass(jDiscoverListener);
\r
662 NS_LOGE ("Failed to Get ObjectClass for jDiscoverListener");
\r
663 if (JNI_EDETACHED == envRet)
\r
665 g_jvm_consumer->DetachCurrentThread();
\r
669 jmethodID mid = env->GetMethodID(
\r
671 "onProviderDiscovered",
\r
672 "(Lorg/iotivity/service/ns/consumer/Provider;)V");
\r
675 NS_LOGE ("Failed to Get MethodID for onProviderDiscovered");
\r
676 if (JNI_EDETACHED == envRet)
\r
678 g_jvm_consumer->DetachCurrentThread();
\r
683 env->CallVoidMethod(jDiscoverListener, mid, obj_provider);
\r
685 env->DeleteLocalRef(jDiscoverListener);
\r
686 if (JNI_EDETACHED == envRet)
\r
688 g_jvm_consumer->DetachCurrentThread();
\r
690 NS_LOGD ("ConsumerService_onDiscoverProvider - OUT");
\r
694 void onProviderState( OIC::Service::NSProviderState state)
\r
696 NS_LOGD ("ConsumerService_onProviderState -IN");
\r
699 JNIEnv *env = GetJNIEnv(&envRet);
\r
705 jobject jAcceptListener = (jobject) env->NewLocalRef(g_obj_acceptListener);
\r
706 if (!jAcceptListener)
\r
708 NS_LOGE ("Failed to Get jAcceptListener");
\r
709 if (JNI_EDETACHED == envRet)
\r
711 g_jvm_consumer->DetachCurrentThread();
\r
715 jobject obj_state = getJavaProviderState(env, state);
\r
718 NS_LOGE ("Failed to Get ProviderState Object");
\r
719 if (JNI_EDETACHED == envRet)
\r
721 g_jvm_consumer->DetachCurrentThread();
\r
726 jclass cls = env->GetObjectClass(jAcceptListener);
\r
729 NS_LOGE ("Failed to Get ObjectClass for jAcceptListener");
\r
730 if (JNI_EDETACHED == envRet)
\r
732 g_jvm_consumer->DetachCurrentThread();
\r
736 jmethodID mid = env->GetMethodID(
\r
738 "onProviderStateReceived",
\r
739 "(Lorg/iotivity/service/ns/consumer/Provider$ProviderState;)V");
\r
742 NS_LOGE ("Failed to Get MethodID for onProviderState");
\r
743 if (JNI_EDETACHED == envRet)
\r
745 g_jvm_consumer->DetachCurrentThread();
\r
749 env->CallVoidMethod(jAcceptListener, mid, obj_state);
\r
751 env->DeleteLocalRef(jAcceptListener);
\r
752 if (JNI_EDETACHED == envRet)
\r
754 g_jvm_consumer->DetachCurrentThread();
\r
756 NS_LOGD ("ConsumerService_onProviderState -OUT");
\r
761 void onMessagePosted(OIC::Service::NSMessage message)
\r
763 NS_LOGD ("ConsumerService_onMessagePosted -IN");
\r
766 JNIEnv *env = GetJNIEnv(&envRet);
\r
772 jobject jPostListener = (jobject) env->NewLocalRef(g_obj_postListener);
\r
773 if (!jPostListener)
\r
775 NS_LOGE ("Failed to Get jPostListener");
\r
776 if (JNI_EDETACHED == envRet)
\r
778 g_jvm_consumer->DetachCurrentThread();
\r
783 jobject obj_message = getJavaMessage( env, message);
\r
786 NS_LOGE ("Failed to Get Message Object");
\r
787 if (JNI_EDETACHED == envRet)
\r
789 g_jvm_consumer->DetachCurrentThread();
\r
793 jclass cls = env->GetObjectClass(jPostListener);
\r
796 NS_LOGE ("Failed to Get ObjectClass for jPostListener");
\r
797 if (JNI_EDETACHED == envRet)
\r
799 g_jvm_consumer->DetachCurrentThread();
\r
803 jmethodID mid = env->GetMethodID(
\r
805 "onMessageReceived",
\r
806 "(Lorg/iotivity/service/ns/common/Message;)V");
\r
809 NS_LOGE ("Failed to Get MethodID for onMessageReceived");
\r
810 if (JNI_EDETACHED == envRet)
\r
812 g_jvm_consumer->DetachCurrentThread();
\r
817 env->CallVoidMethod(jPostListener, mid, obj_message);
\r
819 env->DeleteLocalRef(jPostListener);
\r
820 if (JNI_EDETACHED == envRet)
\r
822 g_jvm_consumer->DetachCurrentThread();
\r
824 NS_LOGD ("ConsumerService_onMessagePosted -OUT");
\r
828 void onSyncInfoReceived(OIC::Service::NSSyncInfo sync)
\r
830 NS_LOGD ("ConsumerService_onSyncInfoReceived - IN");
\r
833 JNIEnv *env = GetJNIEnv(&envRet);
\r
839 jobject jSyncListener = (jobject) env->NewLocalRef(g_obj_syncListener);
\r
840 if (!jSyncListener)
\r
842 NS_LOGE ("Failed to Get jSyncListener");
\r
843 if (JNI_EDETACHED == envRet)
\r
845 g_jvm_consumer->DetachCurrentThread();
\r
850 NS_LOGD ("Sync ID : %llu\n", sync.getMessageId());
\r
851 NS_LOGD ("Sync ProviderId : %s\n", sync.getProviderId().c_str());
\r
852 NS_LOGD ("Sync STATE : %d\n", (int) sync.getState());
\r
854 jlong jMessageId = (jlong) sync.getMessageId();
\r
855 jstring jProviderId = env->NewStringUTF(sync.getProviderId().c_str());
\r
856 jobject syncType = getJavaSyncType(env, sync.getState());
\r
859 NS_LOGE ("Failed to Get syncType for SyncInfo");
\r
860 if (JNI_EDETACHED == envRet)
\r
862 g_jvm_consumer->DetachCurrentThread();
\r
866 jclass cls_SyncInfo = (jclass) (env->NewLocalRef(g_cls_SyncInfo));
\r
869 NS_LOGE ("Failed to Get ObjectClass for SyncInfo");
\r
870 if (JNI_EDETACHED == envRet)
\r
872 g_jvm_consumer->DetachCurrentThread();
\r
876 jmethodID mid_syncInfo = env->GetMethodID(
\r
879 "(JLjava/lang/String;Lorg/iotivity/service/ns/common/SyncInfo$SyncType;)V");
\r
882 NS_LOGE ("Failed to Get MethodID for SyncInfo");
\r
883 if (JNI_EDETACHED == envRet)
\r
885 g_jvm_consumer->DetachCurrentThread();
\r
890 jobject obj_syncInfo = env->NewObject( cls_SyncInfo, mid_syncInfo,
\r
891 jMessageId, jProviderId, syncType);
\r
894 NS_LOGE ("Failed to Get Object for SyncInfo");
\r
895 if (JNI_EDETACHED == envRet)
\r
897 g_jvm_consumer->DetachCurrentThread();
\r
902 jclass cls = env->GetObjectClass(jSyncListener);
\r
905 NS_LOGE ("Failed to Get ObjectClass for jSyncListener");
\r
906 if (JNI_EDETACHED == envRet)
\r
908 g_jvm_consumer->DetachCurrentThread();
\r
912 jmethodID mid = env->GetMethodID(
\r
914 "onSyncInfoReceived",
\r
915 "(Lorg/iotivity/service/ns/common/SyncInfo;)V");
\r
918 NS_LOGE ("Failed to Get MethodID for onSyncInfoReceived");
\r
919 if (JNI_EDETACHED == envRet)
\r
921 g_jvm_consumer->DetachCurrentThread();
\r
926 env->CallVoidMethod(jSyncListener, mid, obj_syncInfo);
\r
928 env->DeleteLocalRef(jSyncListener);
\r
929 env->DeleteLocalRef(cls_SyncInfo);
\r
930 if (JNI_EDETACHED == envRet)
\r
932 g_jvm_consumer->DetachCurrentThread();
\r
934 NS_LOGD ("ConsumerService_onSyncInfoReceived - OUT");
\r
938 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStart
\r
939 (JNIEnv *env, jobject jObj, jobject jDiscoverListener)
\r
941 NS_LOGD ("ConsumerService_StartConsumer - IN");
\r
942 if (!jDiscoverListener)
\r
944 ThrowNSException(JNI_INVALID_VALUE, "Listener cannot be null");
\r
947 if (g_obj_discoverListener != NULL)
\r
949 env->DeleteGlobalRef(g_obj_discoverListener);
\r
951 g_obj_discoverListener = (jobject) env->NewGlobalRef(jDiscoverListener);
\r
953 OIC::Service::NSResult result = OIC::Service::NSConsumerService::getInstance()->start(
\r
954 onDiscoverProvider);
\r
956 if (result != OIC::Service::NSResult::OK)
\r
958 ThrowNSException((int) result, "Fail to start ConsumerService");
\r
961 NS_LOGD ("ConsumerService_StartConsumer - OUT");
\r
966 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStop
\r
967 (JNIEnv *env, jobject jObj)
\r
969 NS_LOGD ("ConsumerService_StopConsumer - IN");
\r
971 env->DeleteGlobalRef(g_obj_postListener);
\r
972 env->DeleteGlobalRef(g_obj_syncListener);
\r
973 env->DeleteGlobalRef(g_obj_discoverListener);
\r
974 env->DeleteGlobalRef(g_obj_acceptListener);
\r
975 g_obj_postListener = NULL;
\r
976 g_obj_syncListener = NULL;
\r
977 g_obj_discoverListener = NULL;
\r
978 g_obj_acceptListener = NULL;
\r
979 OIC::Service::NSResult result = OIC::Service::NSConsumerService::getInstance()->stop();
\r
981 if (result != OIC::Service::NSResult::OK)
\r
983 ThrowNSException((int) result, "Fail to Stop ConsumerService");
\r
986 NS_LOGD ("ConsumerService_StopConsumer - OUT");
\r
990 JNIEXPORT void JNICALL
\r
991 Java_org_iotivity_service_ns_consumer_ConsumerService_nativeEnableRemoteService
\r
992 (JNIEnv *env, jobject jObj, jstring jServerAddress)
\r
994 NS_LOGD ("ConsumerService_EnableRemoteService - IN");
\r
995 if (!jServerAddress)
\r
997 ThrowNSException(JNI_INVALID_VALUE, "EnableRemoteService server address NULL");
\r
1000 const char *serverAddress = env->GetStringUTFChars(jServerAddress, 0);
\r
1001 OIC::Service::NSResult result =
\r
1002 OIC::Service::NSConsumerService::getInstance()->enableRemoteService(std::string(serverAddress));
\r
1004 if (result != OIC::Service::NSResult::OK)
\r
1006 ThrowNSException((int) result, "Fail to EnableRemoteService");
\r
1009 env->ReleaseStringUTFChars(jServerAddress, serverAddress);
\r
1010 NS_LOGD ("ConsumerService_EnableRemoteService - OUT");
\r
1014 JNIEXPORT void JNICALL
\r
1015 Java_org_iotivity_service_ns_consumer_ConsumerService_nativeSubscribeMQService
\r
1016 (JNIEnv *env, jobject jObj, jstring jserverAddress, jstring jTopicName)
\r
1018 NS_LOGD ("ConsumerService: nativeSubscribeMQService - IN");
\r
1019 if (!jserverAddress)
\r
1021 ThrowNSException(JNI_INVALID_VALUE, "Server Address Can't be NULL");
\r
1026 ThrowNSException(JNI_INVALID_VALUE, "TopicName Can't be NULL");
\r
1030 const char *address = env->GetStringUTFChars( jserverAddress, NULL);
\r
1031 std::string servAddress(address);
\r
1032 const char *topic = env->GetStringUTFChars( jTopicName, NULL);
\r
1033 std::string topicName(topic);
\r
1035 OIC::Service::NSResult result =
\r
1036 OIC::Service::NSConsumerService::getInstance()->subscribeMQService(
\r
1037 servAddress, topicName);
\r
1038 if (result != OIC::Service::NSResult::OK)
\r
1040 ThrowNSException((int) result, "Fail to Subscribe to MQ Service");
\r
1043 env->ReleaseStringUTFChars(jserverAddress, address);
\r
1044 env->ReleaseStringUTFChars(jTopicName, topic);
\r
1045 NS_LOGD ("ConsumerService: nativeSubscribeMQService - OUT");
\r
1049 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeRescanProvider
\r
1050 (JNIEnv *env, jobject jObj)
\r
1052 NS_LOGD ("ConsumerService_RescanProvider - IN");
\r
1053 OIC::Service::NSResult result = OIC::Service::NSConsumerService::getInstance()->rescanProvider();
\r
1054 if (result != OIC::Service::NSResult::OK)
\r
1056 ThrowNSException((int) result, "Fail to RescanProvider");
\r
1059 NS_LOGD ("ConsumerService_RescanProvider - OUT");
\r
1064 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSubscribe
\r
1065 (JNIEnv *env, jobject jObj)
\r
1067 NS_LOGD ("Provider_Subscribe -IN");
\r
1068 OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;
\r
1069 jclass providerClass = env->GetObjectClass(jObj);
\r
1070 if (!providerClass)
\r
1072 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1076 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1077 if (!nativeHandle)
\r
1079 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1082 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1085 NS_LOGD ("calling subscribe on mNativeHandle");
\r
1086 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1087 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1090 result = objectHolder->get()->subscribe();
\r
1092 catch (OIC::Service::NSException ex)
\r
1094 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1100 NS_LOGE ("Couldn't find Provider");
\r
1101 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1103 if (result != OIC::Service::NSResult::OK)
\r
1105 ThrowNSException((int) result, "Fail to Subscribe Provider");
\r
1108 NS_LOGD ("Provider_Subscribe -OUT");
\r
1112 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeUnsubscribe
\r
1113 (JNIEnv *env, jobject jObj)
\r
1115 NS_LOGD ("Provider_UnSubscribe -IN");
\r
1116 OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;
\r
1117 jclass providerClass = env->GetObjectClass(jObj);
\r
1118 if (!providerClass)
\r
1120 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1124 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1125 if (!nativeHandle)
\r
1127 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1130 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1133 NS_LOGD ("calling subscribe on mNativeHandle");
\r
1134 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1135 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1138 result = objectHolder->get()->unsubscribe();
\r
1140 catch (OIC::Service::NSException ex)
\r
1142 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1148 NS_LOGE ("Couldn't find Provider");
\r
1149 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1151 if (result != OIC::Service::NSResult::OK)
\r
1153 ThrowNSException((int) result, "Fail to UnSubscribe Provider");
\r
1156 NS_LOGD ("Provider_UnSubscribe -OUT");
\r
1160 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSendSyncInfo
\r
1161 (JNIEnv *env, jobject jObj, jlong jMessageId, jint jSyncType)
\r
1163 NS_LOGD ("Provider_SendSyncInfo - IN");
\r
1164 OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;
\r
1167 ThrowNSException(JNI_INVALID_VALUE, "MessageId cannot be 0");
\r
1171 jclass providerClass = env->GetObjectClass(jObj);
\r
1172 if (!providerClass)
\r
1174 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1178 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1179 if (!nativeHandle)
\r
1181 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1184 uint64_t messageId = (uint64_t) jMessageId;
\r
1186 NS_LOGD ("!!!!!!jMessageId: %lld", jMessageId);
\r
1187 NS_LOGD ("!!!!!!messageId: %lld", messageId);
\r
1189 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1192 NS_LOGD ("calling SendSyncInfo on mNativeHandle");
\r
1193 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1194 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1197 result = objectHolder->get()->sendSyncInfo(messageId,
\r
1198 (OIC::Service::NSSyncInfo::NSSyncType)jSyncType);
\r
1200 catch (OIC::Service::NSException ex)
\r
1202 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1208 NS_LOGE ("Couldn't find Provider");
\r
1209 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1211 if (result != OIC::Service::NSResult::OK)
\r
1213 ThrowNSException((int) result, "Fail to Send sync info");
\r
1216 NS_LOGD ("Provider_SendSyncInfo - OUT");
\r
1221 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSetListener
\r
1222 (JNIEnv *env, jobject jObj, jobject jAcceptListener, jobject jPostListener, jobject jSyncListener)
\r
1224 NS_LOGD ("Provider_SetListener - IN");
\r
1225 if (!jPostListener || !jSyncListener || !jAcceptListener)
\r
1227 ThrowNSException(JNI_INVALID_VALUE, "Listener cannot be null");
\r
1231 jclass providerClass = env->GetObjectClass(jObj);
\r
1232 if (!providerClass)
\r
1234 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1238 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1239 if (!nativeHandle)
\r
1241 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1244 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1247 NS_LOGD ("calling SetListener on mNativeHandle");
\r
1248 if (g_obj_acceptListener != NULL)
\r
1250 env->DeleteGlobalRef(g_obj_acceptListener);
\r
1252 if (g_obj_postListener != NULL)
\r
1254 env->DeleteGlobalRef(g_obj_postListener);
\r
1256 if (g_obj_syncListener != NULL)
\r
1258 env->DeleteGlobalRef(g_obj_syncListener);
\r
1260 g_obj_acceptListener = (jobject) env->NewGlobalRef(jAcceptListener);
\r
1261 g_obj_postListener = (jobject) env->NewGlobalRef(jPostListener);
\r
1262 g_obj_syncListener = (jobject) env->NewGlobalRef(jSyncListener);
\r
1264 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1265 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1266 objectHolder->get()->setListener(onProviderState, onMessagePosted, onSyncInfoReceived);
\r
1270 NS_LOGE ("Couldn't find Provider");
\r
1271 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1273 NS_LOGD ("Provider_SetListener - OUT");
\r
1277 JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeGetTopicList
\r
1278 (JNIEnv *env, jobject jObj)
\r
1280 NS_LOGD ("Provider_nativeGetTopicList - IN");
\r
1281 jclass providerClass = env->GetObjectClass(jObj);
\r
1282 if (!providerClass)
\r
1284 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1288 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1289 if (!nativeHandle)
\r
1291 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1294 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1295 std::shared_ptr<OIC::Service::NSTopicsList> topicList = nullptr;
\r
1298 NS_LOGD ("calling subscribe on mNativeHandle");
\r
1299 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1300 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1303 topicList = objectHolder->get()->getTopicList();
\r
1305 catch (OIC::Service::NSException ex)
\r
1307 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1313 NS_LOGE ("Couldn't find Provider");
\r
1314 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1316 if (topicList == nullptr)
\r
1318 ThrowNSException(JNI_INVALID_VALUE, "Topic List doesn't exist");
\r
1322 jobject obj_topicList = getJavaTopicsList(env, topicList);
\r
1324 NS_LOGD ("Provider_nativeGetTopicList - OUT");
\r
1325 return obj_topicList;
\r
1328 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeUpdateTopicList
\r
1329 (JNIEnv *env, jobject jObj, jobject jTopicsList)
\r
1331 NS_LOGD ("Provider_nativeUpdateTopicList -IN");
\r
1334 ThrowNSException(JNI_INVALID_VALUE, "TopicList cannot be null");
\r
1337 std::shared_ptr<OIC::Service::NSTopicsList> nsTopicsList = getNativeTopicsList(env, jTopicsList);
\r
1338 if (nsTopicsList == nullptr)
\r
1340 ThrowNSException(JNI_INVALID_VALUE, "NSTopicList cannot be created ");
\r
1344 jclass providerClass = env->GetObjectClass(jObj);
\r
1345 if (!providerClass)
\r
1347 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1351 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1352 if (!nativeHandle)
\r
1354 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1357 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1358 OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;
\r
1361 NS_LOGD ("calling subscribe on mNativeHandle");
\r
1362 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1363 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1366 result = objectHolder->get()->updateTopicList(nsTopicsList);
\r
1368 catch (OIC::Service::NSException ex)
\r
1370 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1376 NS_LOGE ("Couldn't find Provider");
\r
1377 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1379 if (result != OIC::Service::NSResult::OK)
\r
1381 ThrowNSException((int) result, "Fail to Update Interest Topics");
\r
1384 NS_LOGD ("Provider_nativeUpdateTopicList -OUT");
\r
1388 JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeGetProviderState
\r
1389 (JNIEnv *env, jobject jObj)
\r
1391 NS_LOGD ("Provider_nativeGetProviderState - IN");
\r
1392 jclass providerClass = env->GetObjectClass(jObj);
\r
1393 if (!providerClass)
\r
1395 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1399 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1400 if (!nativeHandle)
\r
1402 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1405 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1406 OIC::Service::NSProviderState state = OIC::Service::NSProviderState::DENY;
\r
1409 NS_LOGD ("calling getProviderState on mNativeHandle");
\r
1410 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1411 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1414 state = objectHolder->get()->getProviderState();
\r
1416 catch (OIC::Service::NSException ex)
\r
1418 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1424 NS_LOGE ("Couldn't find Provider");
\r
1425 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1427 jobject obj_state = getJavaProviderState(env, state);
\r
1429 NS_LOGD ("Provider_nativeGetProviderState - OUT");
\r
1433 JNIEXPORT jboolean JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeIsSubscribed
\r
1434 (JNIEnv *env, jobject jObj)
\r
1436 NS_LOGD ("nativeIsSubscribed - IN");
\r
1437 jclass providerClass = env->GetObjectClass(jObj);
\r
1438 if (!providerClass)
\r
1440 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1441 return (jboolean)false;
\r
1444 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1445 if (!nativeHandle)
\r
1447 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1448 return (jboolean)false;
\r
1450 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1453 NS_LOGD ("calling isSubscribe on mNativeHandle");
\r
1454 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1455 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1458 return (jboolean) objectHolder->get()->isSubscribed();
\r
1460 catch (OIC::Service::NSException ex)
\r
1462 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1463 return (jboolean)false;
\r
1468 NS_LOGE ("Couldn't find Provider");
\r
1469 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1473 JNIEXPORT void JNICALL
\r
1474 Java_org_iotivity_service_ns_consumer_Provider_nativeDispose
\r
1475 (JNIEnv *env, jobject object)
\r
1477 jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));
\r
1478 if (!cls_provider)
\r
1480 NS_LOGE ("Failed to Get ObjectClass for Provider");
\r
1483 jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");
\r
1484 if (!nativeHandle)
\r
1486 NS_LOGE ("Failed to get nativeHandle for Provider");
\r
1489 jlong handle = env->GetLongField(object, nativeHandle);
\r
1490 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1491 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(handle);
\r
1492 delete objectHolder;
\r
1497 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
\r
1499 NS_LOGD ("ConsumerService_JNI_OnLoad");
\r
1500 g_jvm_consumer = jvm;
\r
1502 JNIEnv *env = NULL;
\r
1503 if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
\r
1505 NS_LOGE ("Failed to get the environment using GetEnv()");
\r
1509 jclass localMessage = env->FindClass(
\r
1510 "org/iotivity/service/ns/common/Message");
\r
1511 if (!localMessage)
\r
1513 NS_LOGE ("Failed to get local Message class");
\r
1516 g_cls_Message = (jclass) (env->NewGlobalRef(localMessage));
\r
1517 if (!g_cls_Message)
\r
1519 NS_LOGE ("Failed to set Global Message reference");
\r
1523 jclass localProvider = env->FindClass(
\r
1524 "org/iotivity/service/ns/consumer/Provider");
\r
1525 if (!localProvider)
\r
1527 NS_LOGE ("Failed to get local Provider class");
\r
1530 g_cls_Provider = (jclass) (env->NewGlobalRef(localProvider));
\r
1531 if (!g_cls_Provider)
\r
1533 NS_LOGE ("Failed to set Global Provider reference");
\r
1537 jclass localSyncInfo = env->FindClass(
\r
1538 "org/iotivity/service/ns/common/SyncInfo");
\r
1539 if (!localSyncInfo)
\r
1541 NS_LOGE ("Failed to get local SyncInfo class");
\r
1544 g_cls_SyncInfo = (jclass) (env->NewGlobalRef(localSyncInfo));
\r
1545 if (!g_cls_SyncInfo)
\r
1547 NS_LOGE ("Failed to set Global NSSyncInfo reference");
\r
1551 jclass localSyncType = env->FindClass(
\r
1552 "org/iotivity/service/ns/common/SyncInfo$SyncType");
\r
1553 if (!localSyncType)
\r
1555 NS_LOGE ("Failed to get local SyncType enum");
\r
1558 g_cls_SyncType = (jclass) (env->NewGlobalRef(localSyncType));
\r
1559 if (!g_cls_SyncType)
\r
1561 NS_LOGE ("Failed to set Global SyncType reference");
\r
1565 jclass localMediaContents = env->FindClass(
\r
1566 "org/iotivity/service/ns/common/MediaContents");
\r
1567 if (!localMediaContents)
\r
1569 NS_LOGE ("Failed to get local MediaContents class");
\r
1572 g_cls_MediaContents = (jclass) (env->NewGlobalRef(localMediaContents));
\r
1573 if (!g_cls_MediaContents)
\r
1575 NS_LOGE ("Failed to set Global MediaContents reference");
\r
1578 jclass localTopicState = env->FindClass(
\r
1579 "org/iotivity/service/ns/common/Topic$TopicState");
\r
1580 if (!localTopicState)
\r
1582 NS_LOGE ("Failed to get local TopicState enum");
\r
1585 g_cls_TopicState = (jclass) (env->NewGlobalRef(localTopicState));
\r
1586 if (!g_cls_TopicState)
\r
1588 NS_LOGE ("Failed to set Global TopicState reference");
\r
1592 jclass localTopic = env->FindClass(
\r
1593 "org/iotivity/service/ns/common/Topic");
\r
1596 NS_LOGE ("Failed to get local TopicState enum");
\r
1599 g_cls_Topic = (jclass) (env->NewGlobalRef(localTopic));
\r
1602 NS_LOGE ("Failed to set Global Topic reference");
\r
1606 jclass localMessageType = env->FindClass(
\r
1607 "org/iotivity/service/ns/common/Message$MessageType");
\r
1608 if (!localMessageType)
\r
1610 NS_LOGE ("Failed to get local Message Type class");
\r
1613 g_cls_Message_Type = (jclass) (env->NewGlobalRef(localMessageType));
\r
1614 if (!g_cls_Message_Type)
\r
1616 NS_LOGE ("Failed to set Global Message Type reference");
\r
1620 jclass localProviderState = env->FindClass(
\r
1621 "org/iotivity/service/ns/consumer/Provider$ProviderState");
\r
1622 if (!localProviderState)
\r
1624 NS_LOGE ("Failed to get localProviderState Type class");
\r
1627 g_cls_ProviderState = (jclass) (env->NewGlobalRef(localProviderState));
\r
1628 if (!g_cls_ProviderState)
\r
1630 NS_LOGE ("Failed to set Global ProviderState Type reference");
\r
1634 jclass localTopicsList = env->FindClass(
\r
1635 "org/iotivity/service/ns/common/TopicsList");
\r
1636 if (!localTopicsList)
\r
1638 NS_LOGE ("Failed to get local Topic class");
\r
1641 g_cls_TopicsList = (jclass) (env->NewGlobalRef(localTopicsList));
\r
1642 if (!g_cls_TopicsList)
\r
1644 NS_LOGE ("Failed to set Global TopicsList reference");
\r
1647 //OcRepresentation
\r
1648 jclass localOcRepresentation = env->FindClass("org/iotivity/base/OcRepresentation");
\r
1649 if (!localOcRepresentation)
\r
1651 NS_LOGE ("Failed to get local OcRepresentation class");
\r
1654 g_cls_OcRepresentation = (jclass) env->NewGlobalRef(localOcRepresentation);
\r
1655 if (!g_cls_OcRepresentation)
\r
1657 NS_LOGE ("Failed to set Global OcRepresentation reference");
\r
1661 g_mid_OcRepresentation_N_ctor_bool = env->GetMethodID(g_cls_OcRepresentation, "<init>", "(JZ)V");
\r
1662 if (!g_mid_OcRepresentation_N_ctor_bool)
\r
1664 NS_LOGE ("Failed to get Global OcRepresentation Constructor reference");
\r
1668 env->DeleteLocalRef(localMessage);
\r
1669 env->DeleteLocalRef(localProvider);
\r
1670 env->DeleteLocalRef(localSyncInfo);
\r
1671 env->DeleteLocalRef(localSyncType);
\r
1672 env->DeleteLocalRef(localMediaContents);
\r
1673 env->DeleteLocalRef(localTopicState);
\r
1674 env->DeleteLocalRef(localMessageType);
\r
1675 env->DeleteLocalRef(localProviderState);
\r
1676 env->DeleteLocalRef(localTopic);
\r
1677 env->DeleteLocalRef(localTopicsList);
\r
1678 env->DeleteLocalRef(localOcRepresentation);
\r
1680 return NSExceptionInit(env);
\r
1683 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved)
\r
1685 NS_LOGI ("ConsumerService_JNI_OnUnload");
\r
1686 JNIEnv *env = NULL;
\r
1688 if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
\r
1690 NS_LOGE ("Failed to get the environment using GetEnv()");
\r
1694 env->DeleteGlobalRef(g_cls_Message);
\r
1695 env->DeleteGlobalRef(g_cls_Provider);
\r
1696 env->DeleteGlobalRef(g_cls_SyncInfo);
\r
1697 env->DeleteGlobalRef(g_cls_SyncType);
\r
1698 env->DeleteGlobalRef(g_cls_MediaContents);
\r
1699 env->DeleteGlobalRef(g_cls_TopicState);
\r
1700 env->DeleteGlobalRef(g_cls_Message_Type);
\r
1701 env->DeleteGlobalRef(g_cls_ProviderState);
\r
1702 env->DeleteGlobalRef(g_cls_Topic);
\r
1703 env->DeleteGlobalRef(g_cls_TopicsList);
\r
1704 env->DeleteGlobalRef(g_cls_OcRepresentation);
\r