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
609 NS_LOGD ("Created OCRepresentation Object from Native");
\r
611 jfieldID fid_extraInfo = env->GetFieldID(cls_message, "mExtraInfo",
\r
612 "Lorg/iotivity/base/OcRepresentation;");
\r
613 if (!fid_extraInfo)
\r
615 NS_LOGE ("Failed to get mExtraInfo for Message");
\r
616 delete ocRepresentation;
\r
619 NS_LOGD ("setting extraInfo field");
\r
620 env->SetObjectField(obj_message, fid_extraInfo, jRepresentation);
\r
622 env->DeleteLocalRef(cls_message);
\r
623 NS_LOGD ("ConsumerService_getJavaMessage - OUT");
\r
624 return obj_message;
\r
627 void onDiscoverProvider(std::shared_ptr<OIC::Service::NSProvider> provider)
\r
629 NS_LOGD ("ConsumerService_onDiscoverProvider - IN");
\r
632 JNIEnv *env = GetJNIEnv(&envRet);
\r
638 jobject jDiscoverListener = (jobject) env->NewLocalRef(g_obj_discoverListener);
\r
639 if (!jDiscoverListener)
\r
641 NS_LOGE ("Failed to Get jDiscoverListener");
\r
642 if (JNI_EDETACHED == envRet)
\r
644 g_jvm_consumer->DetachCurrentThread();
\r
649 jobject obj_provider = getJavaProvider(env, provider);
\r
652 NS_LOGE ("Failed to Get Provider Object");
\r
653 if (JNI_EDETACHED == envRet)
\r
655 g_jvm_consumer->DetachCurrentThread();
\r
660 jclass cls = env->GetObjectClass(jDiscoverListener);
\r
663 NS_LOGE ("Failed to Get ObjectClass for jDiscoverListener");
\r
664 if (JNI_EDETACHED == envRet)
\r
666 g_jvm_consumer->DetachCurrentThread();
\r
670 jmethodID mid = env->GetMethodID(
\r
672 "onProviderDiscovered",
\r
673 "(Lorg/iotivity/service/ns/consumer/Provider;)V");
\r
676 NS_LOGE ("Failed to Get MethodID for onProviderDiscovered");
\r
677 if (JNI_EDETACHED == envRet)
\r
679 g_jvm_consumer->DetachCurrentThread();
\r
684 env->CallVoidMethod(jDiscoverListener, mid, obj_provider);
\r
686 env->DeleteLocalRef(jDiscoverListener);
\r
687 if (JNI_EDETACHED == envRet)
\r
689 g_jvm_consumer->DetachCurrentThread();
\r
691 NS_LOGD ("ConsumerService_onDiscoverProvider - OUT");
\r
695 void onProviderState( OIC::Service::NSProviderState state)
\r
697 NS_LOGD ("ConsumerService_onProviderState -IN");
\r
700 JNIEnv *env = GetJNIEnv(&envRet);
\r
706 jobject jAcceptListener = (jobject) env->NewLocalRef(g_obj_acceptListener);
\r
707 if (!jAcceptListener)
\r
709 NS_LOGE ("Failed to Get jAcceptListener");
\r
710 if (JNI_EDETACHED == envRet)
\r
712 g_jvm_consumer->DetachCurrentThread();
\r
716 jobject obj_state = getJavaProviderState(env, state);
\r
719 NS_LOGE ("Failed to Get ProviderState Object");
\r
720 if (JNI_EDETACHED == envRet)
\r
722 g_jvm_consumer->DetachCurrentThread();
\r
727 jclass cls = env->GetObjectClass(jAcceptListener);
\r
730 NS_LOGE ("Failed to Get ObjectClass for jAcceptListener");
\r
731 if (JNI_EDETACHED == envRet)
\r
733 g_jvm_consumer->DetachCurrentThread();
\r
737 jmethodID mid = env->GetMethodID(
\r
739 "onProviderStateReceived",
\r
740 "(Lorg/iotivity/service/ns/consumer/Provider$ProviderState;)V");
\r
743 NS_LOGE ("Failed to Get MethodID for onProviderState");
\r
744 if (JNI_EDETACHED == envRet)
\r
746 g_jvm_consumer->DetachCurrentThread();
\r
750 env->CallVoidMethod(jAcceptListener, mid, obj_state);
\r
752 env->DeleteLocalRef(jAcceptListener);
\r
753 if (JNI_EDETACHED == envRet)
\r
755 g_jvm_consumer->DetachCurrentThread();
\r
757 NS_LOGD ("ConsumerService_onProviderState -OUT");
\r
762 void onMessagePosted(OIC::Service::NSMessage message)
\r
764 NS_LOGD ("ConsumerService_onMessagePosted -IN");
\r
767 JNIEnv *env = GetJNIEnv(&envRet);
\r
773 jobject jPostListener = (jobject) env->NewLocalRef(g_obj_postListener);
\r
774 if (!jPostListener)
\r
776 NS_LOGE ("Failed to Get jPostListener");
\r
777 if (JNI_EDETACHED == envRet)
\r
779 g_jvm_consumer->DetachCurrentThread();
\r
784 jobject obj_message = getJavaMessage( env, message);
\r
787 NS_LOGE ("Failed to Get Message Object");
\r
788 if (JNI_EDETACHED == envRet)
\r
790 g_jvm_consumer->DetachCurrentThread();
\r
794 jclass cls = env->GetObjectClass(jPostListener);
\r
797 NS_LOGE ("Failed to Get ObjectClass for jPostListener");
\r
798 if (JNI_EDETACHED == envRet)
\r
800 g_jvm_consumer->DetachCurrentThread();
\r
804 jmethodID mid = env->GetMethodID(
\r
806 "onMessageReceived",
\r
807 "(Lorg/iotivity/service/ns/common/Message;)V");
\r
810 NS_LOGE ("Failed to Get MethodID for onMessageReceived");
\r
811 if (JNI_EDETACHED == envRet)
\r
813 g_jvm_consumer->DetachCurrentThread();
\r
818 env->CallVoidMethod(jPostListener, mid, obj_message);
\r
820 env->DeleteLocalRef(jPostListener);
\r
821 if (JNI_EDETACHED == envRet)
\r
823 g_jvm_consumer->DetachCurrentThread();
\r
825 NS_LOGD ("ConsumerService_onMessagePosted -OUT");
\r
829 void onSyncInfoReceived(OIC::Service::NSSyncInfo sync)
\r
831 NS_LOGD ("ConsumerService_onSyncInfoReceived - IN");
\r
834 JNIEnv *env = GetJNIEnv(&envRet);
\r
840 jobject jSyncListener = (jobject) env->NewLocalRef(g_obj_syncListener);
\r
841 if (!jSyncListener)
\r
843 NS_LOGE ("Failed to Get jSyncListener");
\r
844 if (JNI_EDETACHED == envRet)
\r
846 g_jvm_consumer->DetachCurrentThread();
\r
851 NS_LOGD ("Sync ID : %llu\n", sync.getMessageId());
\r
852 NS_LOGD ("Sync ProviderId : %s\n", sync.getProviderId().c_str());
\r
853 NS_LOGD ("Sync STATE : %d\n", (int) sync.getState());
\r
855 jlong jMessageId = (jlong) sync.getMessageId();
\r
856 jstring jProviderId = env->NewStringUTF(sync.getProviderId().c_str());
\r
857 jobject syncType = getJavaSyncType(env, sync.getState());
\r
860 NS_LOGE ("Failed to Get syncType for SyncInfo");
\r
861 if (JNI_EDETACHED == envRet)
\r
863 g_jvm_consumer->DetachCurrentThread();
\r
867 jclass cls_SyncInfo = (jclass) (env->NewLocalRef(g_cls_SyncInfo));
\r
870 NS_LOGE ("Failed to Get ObjectClass for SyncInfo");
\r
871 if (JNI_EDETACHED == envRet)
\r
873 g_jvm_consumer->DetachCurrentThread();
\r
877 jmethodID mid_syncInfo = env->GetMethodID(
\r
880 "(JLjava/lang/String;Lorg/iotivity/service/ns/common/SyncInfo$SyncType;)V");
\r
883 NS_LOGE ("Failed to Get MethodID for SyncInfo");
\r
884 if (JNI_EDETACHED == envRet)
\r
886 g_jvm_consumer->DetachCurrentThread();
\r
891 jobject obj_syncInfo = env->NewObject( cls_SyncInfo, mid_syncInfo,
\r
892 jMessageId, jProviderId, syncType);
\r
895 NS_LOGE ("Failed to Get Object for SyncInfo");
\r
896 if (JNI_EDETACHED == envRet)
\r
898 g_jvm_consumer->DetachCurrentThread();
\r
903 jclass cls = env->GetObjectClass(jSyncListener);
\r
906 NS_LOGE ("Failed to Get ObjectClass for jSyncListener");
\r
907 if (JNI_EDETACHED == envRet)
\r
909 g_jvm_consumer->DetachCurrentThread();
\r
913 jmethodID mid = env->GetMethodID(
\r
915 "onSyncInfoReceived",
\r
916 "(Lorg/iotivity/service/ns/common/SyncInfo;)V");
\r
919 NS_LOGE ("Failed to Get MethodID for onSyncInfoReceived");
\r
920 if (JNI_EDETACHED == envRet)
\r
922 g_jvm_consumer->DetachCurrentThread();
\r
927 env->CallVoidMethod(jSyncListener, mid, obj_syncInfo);
\r
929 env->DeleteLocalRef(jSyncListener);
\r
930 env->DeleteLocalRef(cls_SyncInfo);
\r
931 if (JNI_EDETACHED == envRet)
\r
933 g_jvm_consumer->DetachCurrentThread();
\r
935 NS_LOGD ("ConsumerService_onSyncInfoReceived - OUT");
\r
939 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStart
\r
940 (JNIEnv *env, jobject jObj, jobject jDiscoverListener)
\r
942 NS_LOGD ("ConsumerService_StartConsumer - IN");
\r
943 if (!jDiscoverListener)
\r
945 ThrowNSException(JNI_INVALID_VALUE, "Listener cannot be null");
\r
948 if (g_obj_discoverListener != NULL)
\r
950 env->DeleteGlobalRef(g_obj_discoverListener);
\r
952 g_obj_discoverListener = (jobject) env->NewGlobalRef(jDiscoverListener);
\r
954 OIC::Service::NSResult result = OIC::Service::NSConsumerService::getInstance()->start(
\r
955 onDiscoverProvider);
\r
957 if (result != OIC::Service::NSResult::OK)
\r
959 ThrowNSException((int) result, "Fail to start ConsumerService");
\r
962 NS_LOGD ("ConsumerService_StartConsumer - OUT");
\r
967 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStop
\r
968 (JNIEnv *env, jobject jObj)
\r
970 NS_LOGD ("ConsumerService_StopConsumer - IN");
\r
972 env->DeleteGlobalRef(g_obj_postListener);
\r
973 env->DeleteGlobalRef(g_obj_syncListener);
\r
974 env->DeleteGlobalRef(g_obj_discoverListener);
\r
975 env->DeleteGlobalRef(g_obj_acceptListener);
\r
976 g_obj_postListener = NULL;
\r
977 g_obj_syncListener = NULL;
\r
978 g_obj_discoverListener = NULL;
\r
979 g_obj_acceptListener = NULL;
\r
980 OIC::Service::NSResult result = OIC::Service::NSConsumerService::getInstance()->stop();
\r
982 if (result != OIC::Service::NSResult::OK)
\r
984 ThrowNSException((int) result, "Fail to Stop ConsumerService");
\r
987 NS_LOGD ("ConsumerService_StopConsumer - OUT");
\r
991 JNIEXPORT void JNICALL
\r
992 Java_org_iotivity_service_ns_consumer_ConsumerService_nativeEnableRemoteService
\r
993 (JNIEnv *env, jobject jObj, jstring jServerAddress)
\r
995 NS_LOGD ("ConsumerService_EnableRemoteService - IN");
\r
996 if (!jServerAddress)
\r
998 ThrowNSException(JNI_INVALID_VALUE, "EnableRemoteService server address NULL");
\r
1001 const char *serverAddress = env->GetStringUTFChars(jServerAddress, 0);
\r
1002 OIC::Service::NSResult result =
\r
1003 OIC::Service::NSConsumerService::getInstance()->enableRemoteService(std::string(serverAddress));
\r
1005 if (result != OIC::Service::NSResult::OK)
\r
1007 ThrowNSException((int) result, "Fail to EnableRemoteService");
\r
1010 env->ReleaseStringUTFChars(jServerAddress, serverAddress);
\r
1011 NS_LOGD ("ConsumerService_EnableRemoteService - OUT");
\r
1015 JNIEXPORT void JNICALL
\r
1016 Java_org_iotivity_service_ns_consumer_ConsumerService_nativeSubscribeMQService
\r
1017 (JNIEnv *env, jobject jObj, jstring jserverAddress, jstring jTopicName)
\r
1019 NS_LOGD ("ConsumerService: nativeSubscribeMQService - IN");
\r
1020 if (!jserverAddress)
\r
1022 ThrowNSException(JNI_INVALID_VALUE, "Server Address Can't be NULL");
\r
1027 ThrowNSException(JNI_INVALID_VALUE, "TopicName Can't be NULL");
\r
1031 const char *address = env->GetStringUTFChars( jserverAddress, NULL);
\r
1032 std::string servAddress(address);
\r
1033 const char *topic = env->GetStringUTFChars( jTopicName, NULL);
\r
1034 std::string topicName(topic);
\r
1036 OIC::Service::NSResult result =
\r
1037 OIC::Service::NSConsumerService::getInstance()->subscribeMQService(
\r
1038 servAddress, topicName);
\r
1039 if (result != OIC::Service::NSResult::OK)
\r
1041 ThrowNSException((int) result, "Fail to Subscribe to MQ Service");
\r
1044 env->ReleaseStringUTFChars(jserverAddress, address);
\r
1045 env->ReleaseStringUTFChars(jTopicName, topic);
\r
1046 NS_LOGD ("ConsumerService: nativeSubscribeMQService - OUT");
\r
1050 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeRescanProvider
\r
1051 (JNIEnv *env, jobject jObj)
\r
1053 NS_LOGD ("ConsumerService_RescanProvider - IN");
\r
1054 OIC::Service::NSResult result = OIC::Service::NSConsumerService::getInstance()->rescanProvider();
\r
1055 if (result != OIC::Service::NSResult::OK)
\r
1057 ThrowNSException((int) result, "Fail to RescanProvider");
\r
1060 NS_LOGD ("ConsumerService_RescanProvider - OUT");
\r
1065 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSubscribe
\r
1066 (JNIEnv *env, jobject jObj)
\r
1068 NS_LOGD ("Provider_Subscribe -IN");
\r
1069 OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;
\r
1070 jclass providerClass = env->GetObjectClass(jObj);
\r
1071 if (!providerClass)
\r
1073 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1077 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1078 if (!nativeHandle)
\r
1080 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1083 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1086 NS_LOGD ("calling subscribe on mNativeHandle");
\r
1087 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1088 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1091 result = objectHolder->get()->subscribe();
\r
1093 catch (OIC::Service::NSException ex)
\r
1095 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1101 NS_LOGE ("Couldn't find Provider");
\r
1102 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1104 if (result != OIC::Service::NSResult::OK)
\r
1106 ThrowNSException((int) result, "Fail to Subscribe Provider");
\r
1109 NS_LOGD ("Provider_Subscribe -OUT");
\r
1113 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeUnsubscribe
\r
1114 (JNIEnv *env, jobject jObj)
\r
1116 NS_LOGD ("Provider_UnSubscribe -IN");
\r
1117 OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;
\r
1118 jclass providerClass = env->GetObjectClass(jObj);
\r
1119 if (!providerClass)
\r
1121 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1125 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1126 if (!nativeHandle)
\r
1128 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1131 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1134 NS_LOGD ("calling subscribe on mNativeHandle");
\r
1135 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1136 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1139 result = objectHolder->get()->unsubscribe();
\r
1141 catch (OIC::Service::NSException ex)
\r
1143 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1149 NS_LOGE ("Couldn't find Provider");
\r
1150 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1152 if (result != OIC::Service::NSResult::OK)
\r
1154 ThrowNSException((int) result, "Fail to UnSubscribe Provider");
\r
1157 NS_LOGD ("Provider_UnSubscribe -OUT");
\r
1161 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSendSyncInfo
\r
1162 (JNIEnv *env, jobject jObj, jlong jMessageId, jint jSyncType)
\r
1164 NS_LOGD ("Provider_SendSyncInfo - IN");
\r
1165 OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;
\r
1168 ThrowNSException(JNI_INVALID_VALUE, "MessageId cannot be 0");
\r
1172 jclass providerClass = env->GetObjectClass(jObj);
\r
1173 if (!providerClass)
\r
1175 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1179 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1180 if (!nativeHandle)
\r
1182 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1185 uint64_t messageId = (uint64_t) jMessageId;
\r
1187 NS_LOGD ("!!!!!!jMessageId: %lld", jMessageId);
\r
1188 NS_LOGD ("!!!!!!messageId: %lld", messageId);
\r
1190 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1193 NS_LOGD ("calling SendSyncInfo on mNativeHandle");
\r
1194 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1195 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1198 result = objectHolder->get()->sendSyncInfo(messageId,
\r
1199 (OIC::Service::NSSyncInfo::NSSyncType)jSyncType);
\r
1201 catch (OIC::Service::NSException ex)
\r
1203 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1209 NS_LOGE ("Couldn't find Provider");
\r
1210 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1212 if (result != OIC::Service::NSResult::OK)
\r
1214 ThrowNSException((int) result, "Fail to Send sync info");
\r
1217 NS_LOGD ("Provider_SendSyncInfo - OUT");
\r
1222 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSetListener
\r
1223 (JNIEnv *env, jobject jObj, jobject jAcceptListener, jobject jPostListener, jobject jSyncListener)
\r
1225 NS_LOGD ("Provider_SetListener - IN");
\r
1226 if (!jPostListener || !jSyncListener || !jAcceptListener)
\r
1228 ThrowNSException(JNI_INVALID_VALUE, "Listener cannot be null");
\r
1232 jclass providerClass = env->GetObjectClass(jObj);
\r
1233 if (!providerClass)
\r
1235 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1239 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1240 if (!nativeHandle)
\r
1242 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1245 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1248 NS_LOGD ("calling SetListener on mNativeHandle");
\r
1249 if (g_obj_acceptListener != NULL)
\r
1251 env->DeleteGlobalRef(g_obj_acceptListener);
\r
1253 if (g_obj_postListener != NULL)
\r
1255 env->DeleteGlobalRef(g_obj_postListener);
\r
1257 if (g_obj_syncListener != NULL)
\r
1259 env->DeleteGlobalRef(g_obj_syncListener);
\r
1261 g_obj_acceptListener = (jobject) env->NewGlobalRef(jAcceptListener);
\r
1262 g_obj_postListener = (jobject) env->NewGlobalRef(jPostListener);
\r
1263 g_obj_syncListener = (jobject) env->NewGlobalRef(jSyncListener);
\r
1265 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1266 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1267 objectHolder->get()->setListener(onProviderState, onMessagePosted, onSyncInfoReceived);
\r
1271 NS_LOGE ("Couldn't find Provider");
\r
1272 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1274 NS_LOGD ("Provider_SetListener - OUT");
\r
1278 JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeGetTopicList
\r
1279 (JNIEnv *env, jobject jObj)
\r
1281 NS_LOGD ("Provider_nativeGetTopicList - IN");
\r
1282 jclass providerClass = env->GetObjectClass(jObj);
\r
1283 if (!providerClass)
\r
1285 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1289 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1290 if (!nativeHandle)
\r
1292 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1295 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1296 std::shared_ptr<OIC::Service::NSTopicsList> topicList = nullptr;
\r
1299 NS_LOGD ("calling subscribe on mNativeHandle");
\r
1300 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1301 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1304 topicList = objectHolder->get()->getTopicList();
\r
1306 catch (OIC::Service::NSException ex)
\r
1308 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1314 NS_LOGE ("Couldn't find Provider");
\r
1315 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1317 if (topicList == nullptr)
\r
1319 ThrowNSException(JNI_INVALID_VALUE, "Topic List doesn't exist");
\r
1323 jobject obj_topicList = getJavaTopicsList(env, topicList);
\r
1325 NS_LOGD ("Provider_nativeGetTopicList - OUT");
\r
1326 return obj_topicList;
\r
1329 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeUpdateTopicList
\r
1330 (JNIEnv *env, jobject jObj, jobject jTopicsList)
\r
1332 NS_LOGD ("Provider_nativeUpdateTopicList -IN");
\r
1335 ThrowNSException(JNI_INVALID_VALUE, "TopicList cannot be null");
\r
1338 std::shared_ptr<OIC::Service::NSTopicsList> nsTopicsList = getNativeTopicsList(env, jTopicsList);
\r
1339 if (nsTopicsList == nullptr)
\r
1341 ThrowNSException(JNI_INVALID_VALUE, "NSTopicList cannot be created ");
\r
1345 jclass providerClass = env->GetObjectClass(jObj);
\r
1346 if (!providerClass)
\r
1348 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1352 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1353 if (!nativeHandle)
\r
1355 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1358 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1359 OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;
\r
1362 NS_LOGD ("calling subscribe on mNativeHandle");
\r
1363 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1364 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1367 result = objectHolder->get()->updateTopicList(nsTopicsList);
\r
1369 catch (OIC::Service::NSException ex)
\r
1371 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1377 NS_LOGE ("Couldn't find Provider");
\r
1378 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1380 if (result != OIC::Service::NSResult::OK)
\r
1382 ThrowNSException((int) result, "Fail to Update Interest Topics");
\r
1385 NS_LOGD ("Provider_nativeUpdateTopicList -OUT");
\r
1389 JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeGetProviderState
\r
1390 (JNIEnv *env, jobject jObj)
\r
1392 NS_LOGD ("Provider_nativeGetProviderState - IN");
\r
1393 jclass providerClass = env->GetObjectClass(jObj);
\r
1394 if (!providerClass)
\r
1396 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1400 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1401 if (!nativeHandle)
\r
1403 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1406 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1407 OIC::Service::NSProviderState state = OIC::Service::NSProviderState::DENY;
\r
1410 NS_LOGD ("calling getProviderState on mNativeHandle");
\r
1411 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1412 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1415 state = objectHolder->get()->getProviderState();
\r
1417 catch (OIC::Service::NSException ex)
\r
1419 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1425 NS_LOGE ("Couldn't find Provider");
\r
1426 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1428 jobject obj_state = getJavaProviderState(env, state);
\r
1430 NS_LOGD ("Provider_nativeGetProviderState - OUT");
\r
1434 JNIEXPORT jboolean JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeIsSubscribed
\r
1435 (JNIEnv *env, jobject jObj)
\r
1437 NS_LOGD ("nativeIsSubscribed - IN");
\r
1438 jclass providerClass = env->GetObjectClass(jObj);
\r
1439 if (!providerClass)
\r
1441 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1442 return (jboolean)false;
\r
1445 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1446 if (!nativeHandle)
\r
1448 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1449 return (jboolean)false;
\r
1451 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1454 NS_LOGD ("calling isSubscribe on mNativeHandle");
\r
1455 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1456 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1459 return (jboolean) objectHolder->get()->isSubscribed();
\r
1461 catch (OIC::Service::NSException ex)
\r
1463 ThrowNSException(NATIVE_EXCEPTION, ex.what());
\r
1464 return (jboolean)false;
\r
1469 NS_LOGE ("Couldn't find Provider");
\r
1470 ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");
\r
1474 JNIEXPORT void JNICALL
\r
1475 Java_org_iotivity_service_ns_consumer_Provider_nativeDispose
\r
1476 (JNIEnv *env, jobject object)
\r
1478 jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));
\r
1479 if (!cls_provider)
\r
1481 NS_LOGE ("Failed to Get ObjectClass for Provider");
\r
1484 jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");
\r
1485 if (!nativeHandle)
\r
1487 NS_LOGE ("Failed to get nativeHandle for Provider");
\r
1490 jlong handle = env->GetLongField(object, nativeHandle);
\r
1491 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1492 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(handle);
\r
1493 delete objectHolder;
\r
1498 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
\r
1500 NS_LOGD ("ConsumerService_JNI_OnLoad");
\r
1501 g_jvm_consumer = jvm;
\r
1503 JNIEnv *env = NULL;
\r
1504 if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
\r
1506 NS_LOGE ("Failed to get the environment using GetEnv()");
\r
1510 jclass localMessage = env->FindClass(
\r
1511 "org/iotivity/service/ns/common/Message");
\r
1512 if (!localMessage)
\r
1514 NS_LOGE ("Failed to get local Message class");
\r
1517 g_cls_Message = (jclass) (env->NewGlobalRef(localMessage));
\r
1518 if (!g_cls_Message)
\r
1520 NS_LOGE ("Failed to set Global Message reference");
\r
1524 jclass localProvider = env->FindClass(
\r
1525 "org/iotivity/service/ns/consumer/Provider");
\r
1526 if (!localProvider)
\r
1528 NS_LOGE ("Failed to get local Provider class");
\r
1531 g_cls_Provider = (jclass) (env->NewGlobalRef(localProvider));
\r
1532 if (!g_cls_Provider)
\r
1534 NS_LOGE ("Failed to set Global Provider reference");
\r
1538 jclass localSyncInfo = env->FindClass(
\r
1539 "org/iotivity/service/ns/common/SyncInfo");
\r
1540 if (!localSyncInfo)
\r
1542 NS_LOGE ("Failed to get local SyncInfo class");
\r
1545 g_cls_SyncInfo = (jclass) (env->NewGlobalRef(localSyncInfo));
\r
1546 if (!g_cls_SyncInfo)
\r
1548 NS_LOGE ("Failed to set Global NSSyncInfo reference");
\r
1552 jclass localSyncType = env->FindClass(
\r
1553 "org/iotivity/service/ns/common/SyncInfo$SyncType");
\r
1554 if (!localSyncType)
\r
1556 NS_LOGE ("Failed to get local SyncType enum");
\r
1559 g_cls_SyncType = (jclass) (env->NewGlobalRef(localSyncType));
\r
1560 if (!g_cls_SyncType)
\r
1562 NS_LOGE ("Failed to set Global SyncType reference");
\r
1566 jclass localMediaContents = env->FindClass(
\r
1567 "org/iotivity/service/ns/common/MediaContents");
\r
1568 if (!localMediaContents)
\r
1570 NS_LOGE ("Failed to get local MediaContents class");
\r
1573 g_cls_MediaContents = (jclass) (env->NewGlobalRef(localMediaContents));
\r
1574 if (!g_cls_MediaContents)
\r
1576 NS_LOGE ("Failed to set Global MediaContents reference");
\r
1579 jclass localTopicState = env->FindClass(
\r
1580 "org/iotivity/service/ns/common/Topic$TopicState");
\r
1581 if (!localTopicState)
\r
1583 NS_LOGE ("Failed to get local TopicState enum");
\r
1586 g_cls_TopicState = (jclass) (env->NewGlobalRef(localTopicState));
\r
1587 if (!g_cls_TopicState)
\r
1589 NS_LOGE ("Failed to set Global TopicState reference");
\r
1593 jclass localTopic = env->FindClass(
\r
1594 "org/iotivity/service/ns/common/Topic");
\r
1597 NS_LOGE ("Failed to get local TopicState enum");
\r
1600 g_cls_Topic = (jclass) (env->NewGlobalRef(localTopic));
\r
1603 NS_LOGE ("Failed to set Global Topic reference");
\r
1607 jclass localMessageType = env->FindClass(
\r
1608 "org/iotivity/service/ns/common/Message$MessageType");
\r
1609 if (!localMessageType)
\r
1611 NS_LOGE ("Failed to get local Message Type class");
\r
1614 g_cls_Message_Type = (jclass) (env->NewGlobalRef(localMessageType));
\r
1615 if (!g_cls_Message_Type)
\r
1617 NS_LOGE ("Failed to set Global Message Type reference");
\r
1621 jclass localProviderState = env->FindClass(
\r
1622 "org/iotivity/service/ns/consumer/Provider$ProviderState");
\r
1623 if (!localProviderState)
\r
1625 NS_LOGE ("Failed to get localProviderState Type class");
\r
1628 g_cls_ProviderState = (jclass) (env->NewGlobalRef(localProviderState));
\r
1629 if (!g_cls_ProviderState)
\r
1631 NS_LOGE ("Failed to set Global ProviderState Type reference");
\r
1635 jclass localTopicsList = env->FindClass(
\r
1636 "org/iotivity/service/ns/common/TopicsList");
\r
1637 if (!localTopicsList)
\r
1639 NS_LOGE ("Failed to get local Topic class");
\r
1642 g_cls_TopicsList = (jclass) (env->NewGlobalRef(localTopicsList));
\r
1643 if (!g_cls_TopicsList)
\r
1645 NS_LOGE ("Failed to set Global TopicsList reference");
\r
1648 //OcRepresentation
\r
1649 jclass localOcRepresentation = env->FindClass("org/iotivity/base/OcRepresentation");
\r
1650 if (!localOcRepresentation)
\r
1652 NS_LOGE ("Failed to get local OcRepresentation class");
\r
1655 g_cls_OcRepresentation = (jclass) env->NewGlobalRef(localOcRepresentation);
\r
1656 if (!g_cls_OcRepresentation)
\r
1658 NS_LOGE ("Failed to set Global OcRepresentation reference");
\r
1662 g_mid_OcRepresentation_N_ctor_bool = env->GetMethodID(g_cls_OcRepresentation, "<init>", "(JZ)V");
\r
1663 if (!g_mid_OcRepresentation_N_ctor_bool)
\r
1665 NS_LOGE ("Failed to get Global OcRepresentation Constructor reference");
\r
1669 env->DeleteLocalRef(localMessage);
\r
1670 env->DeleteLocalRef(localProvider);
\r
1671 env->DeleteLocalRef(localSyncInfo);
\r
1672 env->DeleteLocalRef(localSyncType);
\r
1673 env->DeleteLocalRef(localMediaContents);
\r
1674 env->DeleteLocalRef(localTopicState);
\r
1675 env->DeleteLocalRef(localMessageType);
\r
1676 env->DeleteLocalRef(localProviderState);
\r
1677 env->DeleteLocalRef(localTopic);
\r
1678 env->DeleteLocalRef(localTopicsList);
\r
1679 env->DeleteLocalRef(localOcRepresentation);
\r
1681 return NSExceptionInit(env);
\r
1684 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved)
\r
1686 NS_LOGI ("ConsumerService_JNI_OnUnload");
\r
1687 JNIEnv *env = NULL;
\r
1689 if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
\r
1691 NS_LOGE ("Failed to get the environment using GetEnv()");
\r
1695 env->DeleteGlobalRef(g_cls_Message);
\r
1696 env->DeleteGlobalRef(g_cls_Provider);
\r
1697 env->DeleteGlobalRef(g_cls_SyncInfo);
\r
1698 env->DeleteGlobalRef(g_cls_SyncType);
\r
1699 env->DeleteGlobalRef(g_cls_MediaContents);
\r
1700 env->DeleteGlobalRef(g_cls_TopicState);
\r
1701 env->DeleteGlobalRef(g_cls_Message_Type);
\r
1702 env->DeleteGlobalRef(g_cls_ProviderState);
\r
1703 env->DeleteGlobalRef(g_cls_Topic);
\r
1704 env->DeleteGlobalRef(g_cls_TopicsList);
\r
1705 env->DeleteGlobalRef(g_cls_OcRepresentation);
\r