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 "JniOcRepresentation.h"
\r
25 static JavaVM *g_jvm_consumer = NULL;
\r
27 static jobject g_obj_postListener = NULL;
\r
28 static jobject g_obj_syncListener = NULL;
\r
29 static jobject g_obj_discoverListener = NULL;
\r
30 static jobject g_obj_acceptListener = NULL;
\r
32 jclass g_cls_Message;
\r
33 jclass g_cls_Provider;
\r
34 jclass g_cls_SyncInfo;
\r
35 jclass g_cls_SyncType;
\r
36 jclass g_cls_MediaContents;
\r
37 jclass g_cls_TopicState;
\r
38 jclass g_cls_Message_Type;
\r
39 jclass g_cls_ProviderState;
\r
41 jclass g_cls_TopicsList;
\r
42 jclass g_cls_OcRepresentation;
\r
43 jmethodID g_mid_OcRepresentation_N_ctor_bool = NULL;
\r
45 static JNIEnv *GetJNIEnv(jint *ret)
\r
49 *ret = g_jvm_consumer->GetEnv((void **) &env, JNI_CURRENT_VERSION);
\r
55 if (g_jvm_consumer->AttachCurrentThread(&env, NULL) != JNI_OK)
\r
57 NS_LOGE ("Failed to get the environment");
\r
65 NS_LOGE ("JNI version is not supported");
\r
68 NS_LOGE ("Failed to get the environment");
\r
73 jobject getJavaProviderState(JNIEnv *env, OIC::Service::NSProviderState state)
\r
75 NS_LOGD ("ConsumerService_getJavaProviderState - IN");
\r
76 jobject providerState = NULL;
\r
79 case OIC::Service::NSProviderState::ALLOW:
\r
81 static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,
\r
82 "ALLOW", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");
\r
83 providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);
\r
86 case OIC::Service::NSProviderState::DENY:
\r
88 static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,
\r
89 "DENY", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");
\r
90 providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);
\r
93 case OIC::Service::NSProviderState::TOPIC:
\r
95 static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,
\r
96 "TOPIC", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");
\r
97 providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);
\r
100 case OIC::Service::NSProviderState::STOPPED:
\r
102 static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,
\r
103 "STOPPED", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");
\r
104 providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);
\r
109 providerState = NULL;
\r
113 NS_LOGD ("ConsumerService_getJavaProviderState - OUT");
\r
114 return providerState;
\r
117 jobject getJavaSyncType(JNIEnv *env, OIC::Service::NSSyncInfo::NSSyncType nsType)
\r
119 NS_LOGD ("ConsumerService_getJavaSyncType - IN");
\r
122 jclass cls_SyncType = (jclass) (env->NewLocalRef(g_cls_SyncType));
\r
125 NS_LOGE ("Failed to Get ObjectClass for SyncType");
\r
128 jobject syncType = NULL;
\r
131 case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_UNREAD:
\r
133 static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,
\r
134 "UNREAD", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");
\r
135 syncType = env->GetStaticObjectField(cls_SyncType, fieldID);
\r
138 case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ :
\r
140 static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,
\r
141 "READ", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");
\r
142 syncType = env->GetStaticObjectField(cls_SyncType, fieldID);
\r
145 case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_DELETED :
\r
147 static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,
\r
148 "DELETED", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");
\r
149 syncType = env->GetStaticObjectField(cls_SyncType, fieldID);
\r
159 NS_LOGD ("ConsumerService_getJavaSyncType - OUT");
\r
163 jobject getJavaTopicState(JNIEnv *env, OIC::Service::NSTopic::NSTopicState nsState)
\r
165 NS_LOGD ("ConsumerService_getJavaTopicState - IN");
\r
168 jclass cls_topicState = (jclass) (env->NewLocalRef(g_cls_TopicState));
\r
169 if (!cls_topicState)
\r
171 NS_LOGE ("Failed to Get ObjectClass for TopicState Type");
\r
174 jobject topicState = NULL;
\r
178 case OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED:
\r
180 static jfieldID fieldID = env->GetStaticFieldID(cls_topicState,
\r
181 "UNSUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;");
\r
182 topicState = env->GetStaticObjectField(cls_topicState, fieldID);
\r
185 case OIC::Service::NSTopic::NSTopicState::SUBSCRIBED:
\r
187 static jfieldID fieldID = env->GetStaticFieldID(cls_topicState,
\r
188 "SUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;");
\r
189 topicState = env->GetStaticObjectField(cls_topicState, fieldID);
\r
199 NS_LOGD ("ConsumerService_getJavaTopicState - OUT");
\r
203 jobject getJavaTopicsList(JNIEnv *env, std::shared_ptr<OIC::Service::NSTopicsList> topicList)
\r
205 NS_LOGD ("ConsumerService_getJavaTopicsList - IN");
\r
206 jclass cls_topicList = (jclass) (env->NewLocalRef(g_cls_TopicsList));
\r
207 if (!cls_topicList)
\r
209 NS_LOGE ("Failed to Get ObjectClass for TopicsList");
\r
212 jmethodID mid_topicList = env->GetMethodID(cls_topicList, "<init>", "()V");
\r
213 if (!mid_topicList)
\r
215 NS_LOGE ("Failed to Get MethodID for TopicsList<init>");
\r
218 jobject obj_topicList = env->NewObject(cls_topicList, mid_topicList);
\r
219 if (!obj_topicList)
\r
221 NS_LOGE ("Failed to Get object for TopicsList");
\r
224 jmethodID mid_addTopic = env->GetMethodID(cls_topicList, "addTopic",
\r
225 "(Ljava/lang/String;Lorg/iotivity/service/ns/common/Topic$TopicState;)V");
\r
228 NS_LOGE ("Failed to Get MethodID for addTopic");
\r
231 for (auto it : topicList->getTopicsList())
\r
233 jobject jState = getJavaTopicState(env, it.getState());
\r
234 std::string topicName = it.getTopicName();
\r
235 jstring jTopicName = env->NewStringUTF(topicName.c_str());
\r
236 env->CallVoidMethod(obj_topicList, mid_addTopic, jTopicName, jState);
\r
238 env->DeleteLocalRef(cls_topicList);
\r
239 NS_LOGD ("ConsumerService_getJavaTopicsList - OUT");
\r
240 return obj_topicList;
\r
243 bool getNativeTopicState(JNIEnv *env, jobject jTopic , OIC::Service::NSTopic::NSTopicState &state )
\r
245 NS_LOGD ("ConsumerService_getNativeTopicState - IN");
\r
247 jclass cls_topic = env->GetObjectClass( jTopic);
\r
249 jclass cls_TopicState = (jclass) (env->NewLocalRef(g_cls_TopicState));
\r
250 if (!cls_TopicState)
\r
252 NS_LOGE ("Failed to Get ObjectClass for cls_TopicState Type");
\r
255 jmethodID mid = env->GetMethodID(cls_TopicState, "ordinal", "()I");
\r
256 jfieldID fid_state = env->GetFieldID( cls_topic, "mState",
\r
257 "Lorg/iotivity/service/ns/common/Topic$TopicState;");
\r
258 if (fid_state == NULL)
\r
260 NS_LOGE ("Error: jfieldID for state type is null");
\r
263 jobject jobj = env->GetObjectField( jTopic, fid_state);
\r
266 NS_LOGE ("Error: object of field state Type is null");
\r
269 jint jState = env->CallIntMethod(jobj, mid);
\r
270 state = (OIC::Service::NSTopic::NSTopicState) jState;
\r
271 NS_LOGD ("ConsumerService_getNativeTopicState - OUT");
\r
276 const char *getNativeTopicName(JNIEnv *env, jobject jTopic)
\r
278 NS_LOGD ("ConsumerService_getNativeTopicName - IN");
\r
279 jclass cls_topic = env->GetObjectClass( jTopic);
\r
280 if (cls_topic == NULL)
\r
282 NS_LOGE ("Error: Class for Topic is null");
\r
285 jfieldID fid_name = env->GetFieldID( cls_topic, "mTopicName", "Ljava/lang/String;");
\r
286 if (fid_name == NULL)
\r
288 NS_LOGE ("Error: jfieldID for Topic Name is null");
\r
291 jstring jTopicName = (jstring) env->GetObjectField( jTopic, fid_name);
\r
292 const char *topicName = NULL;
\r
295 topicName = env->GetStringUTFChars( jTopicName, NULL);
\r
299 NS_LOGI (TAG, "Info: topicName is null");
\r
301 NS_LOGD ("ConsumerService_getNativeTopicName - OUT");
\r
306 std::shared_ptr<OIC::Service::NSTopicsList> getNativeTopicsList(JNIEnv *env, jobject jTopicList)
\r
308 NS_LOGD ("ConsumerService_getNativeTopicsList - IN");
\r
310 jclass cls_topicList = env->GetObjectClass( jTopicList);
\r
311 if (cls_topicList == NULL)
\r
313 NS_LOGE ("Error: Class for Topic List is null");
\r
316 jfieldID fid_list = env->GetFieldID( cls_topicList, "mTopicsList", "Ljava/util/Vector;");
\r
317 if (fid_list == NULL)
\r
319 NS_LOGE ("Error: jfieldID for Topic List is null");
\r
322 jobject jobj = env->GetObjectField( jTopicList, fid_list);
\r
325 NS_LOGE ("Error: object of field Topic List is null");
\r
328 jclass cls_vec = env->FindClass("java/util/Vector");
\r
329 if (cls_vec == NULL)
\r
331 NS_LOGE ("Error: Class for Vector not found");
\r
334 jmethodID sizeMethod = env->GetMethodID(cls_vec, "size", "()I");
\r
335 if (sizeMethod == NULL)
\r
337 NS_LOGE ("Error: MethodId for Vector Size not found");
\r
340 int size = env->CallIntMethod(jobj, sizeMethod);
\r
341 jmethodID getMethod = env->GetMethodID(cls_vec, "get", "(I)Ljava/lang/Object;");
\r
342 if (getMethod == NULL)
\r
344 NS_LOGE ("Error: MethodId for Vector get not found");
\r
347 std::shared_ptr<OIC::Service::NSTopicsList> nsTopicList = std::make_shared<OIC::Service::NSTopicsList>();
\r
348 for (int index = 0; index < size; index++)
\r
350 jobject topicObj = env->CallObjectMethod(jobj, getMethod, index);
\r
351 if (topicObj == NULL)
\r
353 NS_LOGE ("Error: object of field Topic is null");
\r
356 const char *name = getNativeTopicName(env, topicObj);
\r
357 if (name == nullptr)
\r
359 NS_LOGE ("Error: Couldn't find topic Name");
\r
362 std::string topicName(name);
\r
363 OIC::Service::NSTopic::NSTopicState state = OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED;
\r
364 if (!getNativeTopicState(env, topicObj, state))
\r
368 nsTopicList->addTopic(topicName, state);
\r
371 env->DeleteLocalRef(cls_vec);
\r
372 env->DeleteLocalRef(cls_topicList);
\r
373 NS_LOGD ("ConsumerService_getNativeTopicsList - OUT");
\r
374 return nsTopicList;
\r
377 std::shared_ptr<OIC::Service::NSProvider> getNativeProvider(JNIEnv *env, jobject jObj)
\r
379 NS_LOGD ("ConsumerService_getNativeProvider - IN");
\r
380 jclass providerClass = env->GetObjectClass(jObj);
\r
381 if (!providerClass)
\r
383 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
386 jfieldID jproviderId = env->GetFieldID(providerClass, "mProviderId", "Ljava/lang/String;");
\r
389 ThrowNSException(JNI_INVALID_VALUE, "Failed to get providerId for Provider");
\r
392 jstring jprovider_id = (jstring) env->GetObjectField(jObj, jproviderId);
\r
395 ThrowNSException(JNI_INVALID_VALUE, "ProviderId cannot be null");
\r
399 const char *providerId = env->GetStringUTFChars(jprovider_id, 0);
\r
400 NS_LOGD ("ProviderId : %s\n", providerId);
\r
402 std::shared_ptr<OIC::Service::NSProvider> provider =
\r
403 OIC::Service::NSConsumerService::getInstance()->getProvider(std::string(
\r
405 if (provider == nullptr)
\r
407 ThrowNSException(JNI_INVALID_VALUE, "Provider with Given Id doesn't exist");
\r
410 env->ReleaseStringUTFChars(jprovider_id, providerId);
\r
411 NS_LOGD ("ConsumerService_getNativeProvider - OUT");
\r
415 jobject getJavaProvider(JNIEnv *env, std::shared_ptr<OIC::Service::NSProvider> provider)
\r
417 NS_LOGD ("ConsumerService_getJavaProvider - IN");
\r
418 NS_LOGD ("ProviderId : %s\n", provider->getProviderId().c_str());
\r
420 jstring jProviderId = env->NewStringUTF(provider->getProviderId().c_str());
\r
421 auto *objectHolder = JniSharedObjectHolder<OIC::Service::NSProvider>::create(provider);
\r
424 NS_LOGE ("Failed to create new Object Holder for Provider");
\r
427 jlong pProvider = (long)objectHolder;
\r
429 jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));
\r
432 NS_LOGE ("Failed to Get ObjectClass for Provider");
\r
435 jmethodID mid_provider = env->GetMethodID(
\r
436 cls_provider, "<init>", "(Ljava/lang/String;)V");
\r
439 NS_LOGE ("Failed to Get MethodID for Provider<init>");
\r
442 jobject obj_provider = env->NewObject(cls_provider, mid_provider, jProviderId);
\r
445 NS_LOGE ("Failed to create new Object for Provider");
\r
449 jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");
\r
452 NS_LOGE ("Failed to get nativeHandle for Provider");
\r
455 env->SetLongField(obj_provider, nativeHandle, pProvider);
\r
457 env->DeleteLocalRef(cls_provider);
\r
458 NS_LOGD ("ConsumerService_getJavaProvider - OUT");
\r
459 return obj_provider;
\r
462 jobject getJavaMessageType(JNIEnv *env, OIC::Service::NSMessage::NSMessageType type)
\r
464 NS_LOGD ("ConsumerService_getJavaMessageType - IN");
\r
465 jobject messageType = NULL;
\r
468 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_ALERT:
\r
470 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,
\r
471 "ALERT", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
472 messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);
\r
475 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_NOTICE:
\r
477 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,
\r
478 "NOTICE", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
479 messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);
\r
482 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_EVENT:
\r
484 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,
\r
485 "EVENT", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
486 messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);
\r
489 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_INFO:
\r
491 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,
\r
492 "INFO", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
493 messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);
\r
498 messageType = NULL;
\r
502 NS_LOGD ("ConsumerService_getJavaMessageType - OUT");
\r
503 return messageType;
\r
506 jobject getJavaMessage(JNIEnv *env, OIC::Service::NSMessage message)
\r
508 NS_LOGD ("ConsumerService_getJavaMessage - IN");
\r
510 NS_LOGD ("id : %llu\n", message.getMessageId());
\r
511 NS_LOGD ("title : %s\n", message.getTitle().c_str());
\r
512 NS_LOGD ("content : %s\n", message.getContentText().c_str());
\r
513 NS_LOGD ("source : %s\n", message.getSourceName().c_str());
\r
515 jlong jMessageId = (jlong) message.getMessageId();
\r
516 jstring jProviderId = env->NewStringUTF(message.getProviderId().c_str());
\r
517 jstring jTitle = env->NewStringUTF(message.getTitle().c_str());
\r
518 jstring jContentText = env->NewStringUTF(message.getContentText().c_str());
\r
519 jstring jSourceName = env->NewStringUTF(message.getSourceName().c_str());
\r
520 jstring jTopic = env->NewStringUTF(message.getTopic().c_str());
\r
522 jstring jTime = env->NewStringUTF(message.getTime().c_str());
\r
523 jlong jTTL = (jlong) message.getTTL();
\r
525 jclass cls_message = (jclass) (env->NewLocalRef(g_cls_Message));
\r
528 NS_LOGE ("Failed to Get ObjectClass for Message");
\r
531 jmethodID mid_message = env->GetMethodID(
\r
532 cls_message, "<init>",
\r
533 "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
\r
536 NS_LOGE ("Failed to Get MethodID for Message<init>");
\r
539 jobject obj_message = env->NewObject(cls_message, mid_message,
\r
540 jTitle, jContentText, jSourceName);
\r
543 NS_LOGE ("Failed to Get Java Object for Message");
\r
547 jfieldID fid_messageId = env->GetFieldID(cls_message, "mMessageId", "J");
\r
548 if (!fid_messageId)
\r
550 NS_LOGE ("Failed to get field MessageID for Message");
\r
553 env->SetLongField(obj_message, fid_messageId, jMessageId);
\r
555 jfieldID fid_providerId = env->GetFieldID(cls_message, "mProviderId", "Ljava/lang/String;");
\r
556 if (!fid_providerId)
\r
558 NS_LOGE ("Failed to get field ProviderID for Message");
\r
561 env->SetObjectField(obj_message, fid_providerId, jProviderId);
\r
563 jfieldID fid_time = env->GetFieldID(cls_message, "mTime", "Ljava/lang/String;");
\r
566 NS_LOGE ("Failed to get field Time for Message");
\r
569 env->SetObjectField(obj_message, fid_time, jTime);
\r
571 jfieldID fid_ttl = env->GetFieldID(cls_message, "mTTL", "J");
\r
574 NS_LOGE ("Failed to get field TTL for Message");
\r
577 env->SetLongField(obj_message, fid_ttl, jTTL);
\r
579 jfieldID fid_topic = env->GetFieldID(cls_message, "mTopic", "Ljava/lang/String;");
\r
582 NS_LOGE ("Failed to get mTopic for Message");
\r
585 env->SetObjectField(obj_message, fid_topic, jTopic);
\r
587 OIC::Service::NSMediaContents *mediaCont = message.getMediaContents();
\r
588 if (mediaCont != nullptr)
\r
590 jstring jIconImage = env->NewStringUTF(mediaCont->getIconImage().c_str());
\r
591 jclass cls_mediaContents = (jclass) (env->NewLocalRef(g_cls_MediaContents));
\r
592 if (!cls_mediaContents)
\r
594 NS_LOGE ("Failed to Get ObjectClass for MediaContents");
\r
597 jmethodID mid_mediaContents = env->GetMethodID(
\r
598 cls_mediaContents, "<init>", "(Ljava/lang/String;)V");
\r
599 if (!mid_mediaContents)
\r
601 NS_LOGE ("Failed to Get MethodID for MediaContents<init>");
\r
604 jobject obj_mediaContents = env->NewObject(cls_mediaContents, mid_mediaContents,
\r
607 jfieldID fid_mediaContents = env->GetFieldID(cls_message, "mMediaContents",
\r
608 "Lorg/iotivity/service/ns/common/MediaContents;");
\r
609 if (!fid_mediaContents)
\r
611 NS_LOGE ("Failed to get field mediaContents for Message");
\r
614 env->SetObjectField(obj_message, fid_mediaContents, obj_mediaContents);
\r
618 jobject jType = getJavaMessageType(env, message.getType());
\r
621 jfieldID fid_type = env->GetFieldID(cls_message, "mType",
\r
622 "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
625 NS_LOGE ("Failed to get field Type for Message");
\r
628 env->SetObjectField(obj_message, fid_type, jType);
\r
631 NS_LOGD ("Reading OCRepresentation Object from Native");
\r
633 OC::OCRepresentation *ocRepresentation = new OC::OCRepresentation(message.getExtraInfo());
\r
634 jlong handle = reinterpret_cast<jlong>(ocRepresentation);
\r
635 jobject jRepresentation = env->NewObject(g_cls_OcRepresentation, g_mid_OcRepresentation_N_ctor_bool,
\r
637 if (!jRepresentation)
\r
639 NS_LOGE ("Failed to create OcRepresentation");
\r
640 delete ocRepresentation;
\r
644 NS_LOGD ("Created OCRepresentation Object from Native");
\r
646 jfieldID fid_extraInfo = env->GetFieldID(cls_message, "mExtraInfo",
\r
647 "Lorg/iotivity/base/OcRepresentation;");
\r
648 if (!fid_extraInfo)
\r
650 NS_LOGE ("Failed to get mExtraInfo for Message");
\r
651 delete ocRepresentation;
\r
654 NS_LOGD ("setting extraInfo field");
\r
655 env->SetObjectField(obj_message, fid_extraInfo, jRepresentation);
\r
657 env->DeleteLocalRef(cls_message);
\r
658 NS_LOGD ("ConsumerService_getJavaMessage - OUT");
\r
659 return obj_message;
\r
662 void onDiscoverProvider(std::shared_ptr<OIC::Service::NSProvider> provider)
\r
664 NS_LOGD ("ConsumerService_onDiscoverProvider - IN");
\r
667 JNIEnv *env = GetJNIEnv(&envRet);
\r
673 jobject jDiscoverListener = (jobject) env->NewLocalRef(g_obj_discoverListener);
\r
674 if (!jDiscoverListener)
\r
676 NS_LOGE ("Failed to Get jDiscoverListener");
\r
677 if (JNI_EDETACHED == envRet)
\r
679 g_jvm_consumer->DetachCurrentThread();
\r
684 jobject obj_provider = getJavaProvider(env, provider);
\r
687 NS_LOGE ("Failed to Get Provider Object");
\r
688 if (JNI_EDETACHED == envRet)
\r
690 g_jvm_consumer->DetachCurrentThread();
\r
695 jclass cls = env->GetObjectClass(jDiscoverListener);
\r
698 NS_LOGE ("Failed to Get ObjectClass for jDiscoverListener");
\r
699 if (JNI_EDETACHED == envRet)
\r
701 g_jvm_consumer->DetachCurrentThread();
\r
705 jmethodID mid = env->GetMethodID(
\r
707 "onProviderDiscovered",
\r
708 "(Lorg/iotivity/service/ns/consumer/Provider;)V");
\r
711 NS_LOGE ("Failed to Get MethodID for onProviderDiscovered");
\r
712 if (JNI_EDETACHED == envRet)
\r
714 g_jvm_consumer->DetachCurrentThread();
\r
719 env->CallVoidMethod(jDiscoverListener, mid, obj_provider);
\r
721 env->DeleteLocalRef(jDiscoverListener);
\r
722 if (JNI_EDETACHED == envRet)
\r
724 g_jvm_consumer->DetachCurrentThread();
\r
726 NS_LOGD ("ConsumerService_onDiscoverProvider - OUT");
\r
730 void onProviderState( OIC::Service::NSProviderState state)
\r
732 NS_LOGD ("ConsumerService_onProviderState -IN");
\r
735 JNIEnv *env = GetJNIEnv(&envRet);
\r
741 jobject jAcceptListener = (jobject) env->NewLocalRef(g_obj_acceptListener);
\r
742 if (!jAcceptListener)
\r
744 NS_LOGE ("Failed to Get jAcceptListener");
\r
745 if (JNI_EDETACHED == envRet)
\r
747 g_jvm_consumer->DetachCurrentThread();
\r
751 jobject obj_state = getJavaProviderState(env, state);
\r
754 NS_LOGE ("Failed to Get ProviderState Object");
\r
755 if (JNI_EDETACHED == envRet)
\r
757 g_jvm_consumer->DetachCurrentThread();
\r
762 jclass cls = env->GetObjectClass(jAcceptListener);
\r
765 NS_LOGE ("Failed to Get ObjectClass for jAcceptListener");
\r
766 if (JNI_EDETACHED == envRet)
\r
768 g_jvm_consumer->DetachCurrentThread();
\r
772 jmethodID mid = env->GetMethodID(
\r
774 "onProviderStateReceived",
\r
775 "(Lorg/iotivity/service/ns/consumer/Provider$ProviderState;)V");
\r
778 NS_LOGE ("Failed to Get MethodID for onProviderState");
\r
779 if (JNI_EDETACHED == envRet)
\r
781 g_jvm_consumer->DetachCurrentThread();
\r
785 env->CallVoidMethod(jAcceptListener, mid, obj_state);
\r
787 env->DeleteLocalRef(jAcceptListener);
\r
788 if (JNI_EDETACHED == envRet)
\r
790 g_jvm_consumer->DetachCurrentThread();
\r
792 NS_LOGD ("ConsumerService_onProviderState -OUT");
\r
797 void onMessagePosted(OIC::Service::NSMessage message)
\r
799 NS_LOGD ("ConsumerService_onMessagePosted -IN");
\r
802 JNIEnv *env = GetJNIEnv(&envRet);
\r
808 jobject jPostListener = (jobject) env->NewLocalRef(g_obj_postListener);
\r
809 if (!jPostListener)
\r
811 NS_LOGE ("Failed to Get jPostListener");
\r
812 if (JNI_EDETACHED == envRet)
\r
814 g_jvm_consumer->DetachCurrentThread();
\r
819 jobject obj_message = getJavaMessage( env, message);
\r
822 NS_LOGE ("Failed to Get Message Object");
\r
823 if (JNI_EDETACHED == envRet)
\r
825 g_jvm_consumer->DetachCurrentThread();
\r
829 jclass cls = env->GetObjectClass(jPostListener);
\r
832 NS_LOGE ("Failed to Get ObjectClass for jPostListener");
\r
833 if (JNI_EDETACHED == envRet)
\r
835 g_jvm_consumer->DetachCurrentThread();
\r
839 jmethodID mid = env->GetMethodID(
\r
841 "onMessageReceived",
\r
842 "(Lorg/iotivity/service/ns/common/Message;)V");
\r
845 NS_LOGE ("Failed to Get MethodID for onMessageReceived");
\r
846 if (JNI_EDETACHED == envRet)
\r
848 g_jvm_consumer->DetachCurrentThread();
\r
853 env->CallVoidMethod(jPostListener, mid, obj_message);
\r
855 env->DeleteLocalRef(jPostListener);
\r
856 if (JNI_EDETACHED == envRet)
\r
858 g_jvm_consumer->DetachCurrentThread();
\r
860 NS_LOGD ("ConsumerService_onMessagePosted -OUT");
\r
864 void onSyncInfoReceived(OIC::Service::NSSyncInfo sync)
\r
866 NS_LOGD ("ConsumerService_onSyncInfoReceived - IN");
\r
869 JNIEnv *env = GetJNIEnv(&envRet);
\r
875 jobject jSyncListener = (jobject) env->NewLocalRef(g_obj_syncListener);
\r
876 if (!jSyncListener)
\r
878 NS_LOGE ("Failed to Get jSyncListener");
\r
879 if (JNI_EDETACHED == envRet)
\r
881 g_jvm_consumer->DetachCurrentThread();
\r
886 NS_LOGD ("Sync ID : %llu\n", sync.getMessageId());
\r
887 NS_LOGD ("Sync ProviderId : %s\n", sync.getProviderId().c_str());
\r
888 NS_LOGD ("Sync STATE : %d\n", (int) sync.getState());
\r
890 jlong jMessageId = (jlong) sync.getMessageId();
\r
891 jstring jProviderId = env->NewStringUTF(sync.getProviderId().c_str());
\r
892 jobject syncType = getJavaSyncType(env, sync.getState());
\r
895 NS_LOGE ("Failed to Get syncType for SyncInfo");
\r
896 if (JNI_EDETACHED == envRet)
\r
898 g_jvm_consumer->DetachCurrentThread();
\r
902 jclass cls_SyncInfo = (jclass) (env->NewLocalRef(g_cls_SyncInfo));
\r
905 NS_LOGE ("Failed to Get ObjectClass for SyncInfo");
\r
906 if (JNI_EDETACHED == envRet)
\r
908 g_jvm_consumer->DetachCurrentThread();
\r
912 jmethodID mid_syncInfo = env->GetMethodID(
\r
915 "(JLjava/lang/String;Lorg/iotivity/service/ns/common/SyncInfo$SyncType;)V");
\r
918 NS_LOGE ("Failed to Get MethodID for SyncInfo");
\r
919 if (JNI_EDETACHED == envRet)
\r
921 g_jvm_consumer->DetachCurrentThread();
\r
926 jobject obj_syncInfo = env->NewObject( cls_SyncInfo, mid_syncInfo,
\r
927 jMessageId, jProviderId, syncType);
\r
930 NS_LOGE ("Failed to Get Object for SyncInfo");
\r
931 if (JNI_EDETACHED == envRet)
\r
933 g_jvm_consumer->DetachCurrentThread();
\r
938 jclass cls = env->GetObjectClass(jSyncListener);
\r
941 NS_LOGE ("Failed to Get ObjectClass for jSyncListener");
\r
942 if (JNI_EDETACHED == envRet)
\r
944 g_jvm_consumer->DetachCurrentThread();
\r
948 jmethodID mid = env->GetMethodID(
\r
950 "onSyncInfoReceived",
\r
951 "(Lorg/iotivity/service/ns/common/SyncInfo;)V");
\r
954 NS_LOGE ("Failed to Get MethodID for onSyncInfoReceived");
\r
955 if (JNI_EDETACHED == envRet)
\r
957 g_jvm_consumer->DetachCurrentThread();
\r
962 env->CallVoidMethod(jSyncListener, mid, obj_syncInfo);
\r
964 env->DeleteLocalRef(jSyncListener);
\r
965 env->DeleteLocalRef(cls_SyncInfo);
\r
966 if (JNI_EDETACHED == envRet)
\r
968 g_jvm_consumer->DetachCurrentThread();
\r
970 NS_LOGD ("ConsumerService_onSyncInfoReceived - OUT");
\r
974 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStart
\r
975 (JNIEnv *env, jobject jObj, jobject jDiscoverListener)
\r
977 NS_LOGD ("ConsumerService_StartConsumer - IN");
\r
978 if (!jDiscoverListener)
\r
980 ThrowNSException(JNI_INVALID_VALUE, "Listener cannot be null");
\r
983 if (g_obj_discoverListener != NULL)
\r
985 env->DeleteGlobalRef(g_obj_discoverListener);
\r
987 g_obj_discoverListener = (jobject) env->NewGlobalRef(jDiscoverListener);
\r
989 OIC::Service::NSResult result = OIC::Service::NSConsumerService::getInstance()->start(
\r
990 onDiscoverProvider);
\r
992 if (result != OIC::Service::NSResult::OK)
\r
994 ThrowNSException((int) result, "Fail to start ConsumerService");
\r
997 NS_LOGD ("ConsumerService_StartConsumer - OUT");
\r
1002 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStop
\r
1003 (JNIEnv *env, jobject jObj)
\r
1005 NS_LOGD ("ConsumerService_StopConsumer - IN");
\r
1007 env->DeleteGlobalRef(g_obj_postListener);
\r
1008 env->DeleteGlobalRef(g_obj_syncListener);
\r
1009 env->DeleteGlobalRef(g_obj_discoverListener);
\r
1010 env->DeleteGlobalRef(g_obj_acceptListener);
\r
1011 g_obj_postListener = NULL;
\r
1012 g_obj_syncListener = NULL;
\r
1013 g_obj_discoverListener = NULL;
\r
1014 g_obj_acceptListener = NULL;
\r
1015 OIC::Service::NSResult result = OIC::Service::NSConsumerService::getInstance()->stop();
\r
1017 if (result != OIC::Service::NSResult::OK)
\r
1019 ThrowNSException((int) result, "Fail to Stop ConsumerService");
\r
1022 NS_LOGD ("ConsumerService_StopConsumer - OUT");
\r
1026 JNIEXPORT void JNICALL
\r
1027 Java_org_iotivity_service_ns_consumer_ConsumerService_nativeEnableRemoteService
\r
1028 (JNIEnv *env, jobject jObj, jstring jServerAddress)
\r
1030 NS_LOGD ("ConsumerService_EnableRemoteService - IN");
\r
1031 if (!jServerAddress)
\r
1033 ThrowNSException(JNI_INVALID_VALUE, "EnableRemoteService server address NULL");
\r
1036 const char *serverAddress = env->GetStringUTFChars(jServerAddress, 0);
\r
1037 OIC::Service::NSResult result =
\r
1038 OIC::Service::NSConsumerService::getInstance()->enableRemoteService(std::string(serverAddress));
\r
1040 if (result != OIC::Service::NSResult::OK)
\r
1042 ThrowNSException((int) result, "Fail to EnableRemoteService");
\r
1045 env->ReleaseStringUTFChars(jServerAddress, serverAddress);
\r
1046 NS_LOGD ("ConsumerService_EnableRemoteService - OUT");
\r
1050 JNIEXPORT void JNICALL
\r
1051 Java_org_iotivity_service_ns_consumer_ConsumerService_nativeSubscribeMQService
\r
1052 (JNIEnv *env, jobject jObj, jstring jserverAddress, jstring jTopicName)
\r
1054 NS_LOGD ("ConsumerService: nativeSubscribeMQService - IN");
\r
1055 if (!jserverAddress)
\r
1057 ThrowNSException(JNI_INVALID_VALUE, "Server Address Can't be NULL");
\r
1062 ThrowNSException(JNI_INVALID_VALUE, "TopicName Can't be NULL");
\r
1066 const char *address = env->GetStringUTFChars( jserverAddress, NULL);
\r
1067 std::string servAddress(address);
\r
1068 const char *topic = env->GetStringUTFChars( jTopicName, NULL);
\r
1069 std::string topicName(topic);
\r
1071 OIC::Service::NSResult result =
\r
1072 OIC::Service::NSConsumerService::getInstance()->subscribeMQService(
\r
1073 servAddress, topicName);
\r
1074 if (result != OIC::Service::NSResult::OK)
\r
1076 ThrowNSException((int) result, "Fail to Subscribe to MQ Service");
\r
1079 env->ReleaseStringUTFChars(jserverAddress, address);
\r
1080 env->ReleaseStringUTFChars(jTopicName, topic);
\r
1081 NS_LOGD ("ConsumerService: nativeSubscribeMQService - OUT");
\r
1085 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeRescanProvider
\r
1086 (JNIEnv *env, jobject jObj)
\r
1088 NS_LOGD ("ConsumerService_RescanProvider - IN");
\r
1089 OIC::Service::NSResult result = OIC::Service::NSConsumerService::getInstance()->rescanProvider();
\r
1090 if (result != OIC::Service::NSResult::OK)
\r
1092 ThrowNSException((int) result, "Fail to RescanProvider");
\r
1095 NS_LOGD ("ConsumerService_RescanProvider - OUT");
\r
1100 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSubscribe
\r
1101 (JNIEnv *env, jobject jObj)
\r
1103 NS_LOGD ("Provider_Subscribe -IN");
\r
1104 OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;
\r
1105 jclass providerClass = env->GetObjectClass(jObj);
\r
1106 if (!providerClass)
\r
1108 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1112 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1113 if (!nativeHandle)
\r
1115 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1118 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1121 NS_LOGD ("calling subscribe on mNativeHandle");
\r
1122 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1123 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1124 result = objectHolder->get()->subscribe();
\r
1128 std::shared_ptr<OIC::Service::NSProvider> provider = getNativeProvider(env, jObj);
\r
1129 if (provider == nullptr)
\r
1131 ThrowNSException(JNI_INVALID_VALUE, "Provider with Given Id doesn't exist");
\r
1134 NS_LOGD ("calling subscribe on ProviderID");
\r
1135 result = provider->subscribe();
\r
1137 if (result != OIC::Service::NSResult::OK)
\r
1139 ThrowNSException((int) result, "Fail to Subscribe Provider");
\r
1142 NS_LOGD ("Provider_Subscribe -OUT");
\r
1146 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeUnsubscribe
\r
1147 (JNIEnv *env, jobject jObj)
\r
1149 NS_LOGD ("Provider_UnSubscribe -IN");
\r
1150 OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;
\r
1151 jclass providerClass = env->GetObjectClass(jObj);
\r
1152 if (!providerClass)
\r
1154 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1158 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1159 if (!nativeHandle)
\r
1161 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1164 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1167 NS_LOGD ("calling subscribe on mNativeHandle");
\r
1168 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1169 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1170 result = objectHolder->get()->unsubscribe();
\r
1174 std::shared_ptr<OIC::Service::NSProvider> provider = getNativeProvider(env, jObj);
\r
1175 if (provider == nullptr)
\r
1177 ThrowNSException(JNI_INVALID_VALUE, "Provider with Given Id doesn't exist");
\r
1180 NS_LOGD ("calling subscribe on ProviderID");
\r
1181 result = provider->unsubscribe();
\r
1183 if (result != OIC::Service::NSResult::OK)
\r
1185 ThrowNSException((int) result, "Fail to UnSubscribe Provider");
\r
1188 NS_LOGD ("Provider_UnSubscribe -OUT");
\r
1192 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSendSyncInfo
\r
1193 (JNIEnv *env, jobject jObj, jlong jMessageId, jint jSyncType)
\r
1195 NS_LOGD ("Provider_SendSyncInfo - IN");
\r
1196 OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;
\r
1199 ThrowNSException(JNI_INVALID_VALUE, "MessageId cannot be 0");
\r
1203 jclass providerClass = env->GetObjectClass(jObj);
\r
1204 if (!providerClass)
\r
1206 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1210 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1211 if (!nativeHandle)
\r
1213 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1216 uint64_t messageId = (uint64_t) jMessageId;
\r
1218 NS_LOGD ("!!!!!!jMessageId: %lld", jMessageId);
\r
1219 NS_LOGD ("!!!!!!messageId: %lld", messageId);
\r
1221 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1224 NS_LOGD ("calling SendSyncInfo on mNativeHandle");
\r
1225 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1226 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1227 result = objectHolder->get()->sendSyncInfo(messageId,
\r
1228 (OIC::Service::NSSyncInfo::NSSyncType)jSyncType);
\r
1232 std::shared_ptr<OIC::Service::NSProvider> provider = getNativeProvider(env, jObj);
\r
1233 if (provider == nullptr)
\r
1235 ThrowNSException(JNI_INVALID_VALUE, "Provider with Given Id doesn't exist");
\r
1238 NS_LOGD ("calling SendSyncInfo on ProviderID");
\r
1239 result = provider->sendSyncInfo(messageId, (OIC::Service::NSSyncInfo::NSSyncType)jSyncType);
\r
1241 if (result != OIC::Service::NSResult::OK)
\r
1243 ThrowNSException((int) result, "Fail to Send sync info");
\r
1246 NS_LOGD ("Provider_SendSyncInfo - OUT");
\r
1251 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSetListener
\r
1252 (JNIEnv *env, jobject jObj, jobject jAcceptListener, jobject jPostListener, jobject jSyncListener)
\r
1254 NS_LOGD ("Provider_SetListener - IN");
\r
1255 if (!jPostListener || !jSyncListener || !jAcceptListener)
\r
1257 ThrowNSException(JNI_INVALID_VALUE, "Listener cannot be null");
\r
1261 jclass providerClass = env->GetObjectClass(jObj);
\r
1262 if (!providerClass)
\r
1264 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1268 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1269 if (!nativeHandle)
\r
1271 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1274 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1277 NS_LOGD ("calling SetListener on mNativeHandle");
\r
1278 if (g_obj_acceptListener != NULL)
\r
1280 env->DeleteGlobalRef(g_obj_acceptListener);
\r
1282 if (g_obj_postListener != NULL)
\r
1284 env->DeleteGlobalRef(g_obj_postListener);
\r
1286 if (g_obj_syncListener != NULL)
\r
1288 env->DeleteGlobalRef(g_obj_syncListener);
\r
1290 g_obj_acceptListener = (jobject) env->NewGlobalRef(jAcceptListener);
\r
1291 g_obj_postListener = (jobject) env->NewGlobalRef(jPostListener);
\r
1292 g_obj_syncListener = (jobject) env->NewGlobalRef(jSyncListener);
\r
1294 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1295 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1296 objectHolder->get()->setListener(onProviderState, onMessagePosted, onSyncInfoReceived);
\r
1300 std::shared_ptr<OIC::Service::NSProvider> provider = getNativeProvider(env, jObj);
\r
1301 if (provider == nullptr)
\r
1303 ThrowNSException(JNI_INVALID_VALUE, "Provider with Given Id doesn't exist");
\r
1306 NS_LOGD ("calling SetListener on ProviderID");
\r
1307 if (g_obj_acceptListener != NULL)
\r
1309 env->DeleteGlobalRef(g_obj_acceptListener);
\r
1311 if (g_obj_postListener != NULL)
\r
1313 env->DeleteGlobalRef(g_obj_postListener);
\r
1315 if (g_obj_syncListener != NULL)
\r
1317 env->DeleteGlobalRef(g_obj_syncListener);
\r
1319 g_obj_acceptListener = (jobject) env->NewGlobalRef(jAcceptListener);
\r
1320 g_obj_postListener = (jobject) env->NewGlobalRef(jPostListener);
\r
1321 g_obj_syncListener = (jobject) env->NewGlobalRef(jSyncListener);
\r
1323 provider->setListener(onProviderState, onMessagePosted, onSyncInfoReceived);
\r
1325 NS_LOGD ("Provider_SetListener - OUT");
\r
1329 JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeGetTopicList
\r
1330 (JNIEnv *env, jobject jObj)
\r
1332 NS_LOGD ("Provider_nativeGetTopicList - IN");
\r
1333 jclass providerClass = env->GetObjectClass(jObj);
\r
1334 if (!providerClass)
\r
1336 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1340 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1341 if (!nativeHandle)
\r
1343 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1346 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1347 std::shared_ptr<OIC::Service::NSTopicsList> topicList = nullptr;
\r
1350 NS_LOGD ("calling subscribe on mNativeHandle");
\r
1351 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1352 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1353 topicList = objectHolder->get()->getTopicList();
\r
1357 std::shared_ptr<OIC::Service::NSProvider> provider = getNativeProvider(env, jObj);
\r
1358 if (provider == nullptr)
\r
1360 ThrowNSException(JNI_INVALID_VALUE, "Provider with Given Id doesn't exist");
\r
1363 NS_LOGD ("calling subscribe on ProviderID");
\r
1364 topicList = provider->getTopicList();
\r
1366 if (topicList == nullptr)
\r
1368 ThrowNSException(JNI_INVALID_VALUE, "Topic List doesn't exist");
\r
1372 jobject obj_topicList = getJavaTopicsList(env, topicList);
\r
1374 NS_LOGD ("Provider_nativeGetTopicList - OUT");
\r
1375 return obj_topicList;
\r
1378 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeUpdateTopicList
\r
1379 (JNIEnv *env, jobject jObj, jobject jTopicsList)
\r
1381 NS_LOGD ("Provider_nativeUpdateTopicList -IN");
\r
1384 ThrowNSException(JNI_INVALID_VALUE, "TopicList cannot be null");
\r
1387 std::shared_ptr<OIC::Service::NSTopicsList> nsTopicsList = getNativeTopicsList(env, jTopicsList);
\r
1388 if (nsTopicsList == nullptr)
\r
1390 ThrowNSException(JNI_INVALID_VALUE, "NSTopicList cannot be created ");
\r
1394 jclass providerClass = env->GetObjectClass(jObj);
\r
1395 if (!providerClass)
\r
1397 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1401 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1402 if (!nativeHandle)
\r
1404 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1407 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1408 OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;
\r
1411 NS_LOGD ("calling subscribe on mNativeHandle");
\r
1412 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1413 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1414 result = objectHolder->get()->updateTopicList(nsTopicsList);
\r
1418 std::shared_ptr<OIC::Service::NSProvider> provider = getNativeProvider(env, jObj);
\r
1419 if (provider == nullptr)
\r
1421 ThrowNSException(JNI_INVALID_VALUE, "Provider with Given Id doesn't exist");
\r
1424 NS_LOGD ("calling subscribe on ProviderID");
\r
1425 result = provider->updateTopicList(nsTopicsList);
\r
1427 if (result != OIC::Service::NSResult::OK)
\r
1429 ThrowNSException((int) result, "Fail to Update Interest Topics");
\r
1432 NS_LOGD ("Provider_nativeUpdateTopicList -OUT");
\r
1436 JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeGetProviderState
\r
1437 (JNIEnv *env, jobject jObj)
\r
1439 NS_LOGD ("Provider_nativeGetProviderState - IN");
\r
1440 jclass providerClass = env->GetObjectClass(jObj);
\r
1441 if (!providerClass)
\r
1443 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1447 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1448 if (!nativeHandle)
\r
1450 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1453 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1454 OIC::Service::NSProviderState state = OIC::Service::NSProviderState::DENY;
\r
1457 NS_LOGD ("calling getProviderState on mNativeHandle");
\r
1458 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1459 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1460 state = objectHolder->get()->getProviderState();
\r
1464 std::shared_ptr<OIC::Service::NSProvider> provider = getNativeProvider(env, jObj);
\r
1465 if (provider == nullptr)
\r
1467 ThrowNSException(JNI_INVALID_VALUE, "Provider with Given Id doesn't exist");
\r
1470 NS_LOGD ("calling getProviderState on ProviderID");
\r
1471 state = provider->getProviderState();
\r
1473 jobject obj_state = getJavaProviderState(env, state);
\r
1475 NS_LOGD ("Provider_nativeGetProviderState - OUT");
\r
1479 JNIEXPORT jboolean JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeIsSubscribed
\r
1480 (JNIEnv *env, jobject jObj)
\r
1482 NS_LOGD ("nativeIsSubscribed - IN");
\r
1483 jclass providerClass = env->GetObjectClass(jObj);
\r
1484 if (!providerClass)
\r
1486 ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");
\r
1487 return (jboolean)false;
\r
1490 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1491 if (!nativeHandle)
\r
1493 ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");
\r
1494 return (jboolean)false;
\r
1496 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1499 NS_LOGD ("calling isSubscribe on mNativeHandle");
\r
1500 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1501 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);
\r
1502 return (jboolean) objectHolder->get()->isSubscribed();
\r
1506 std::shared_ptr<OIC::Service::NSProvider> provider = getNativeProvider(env, jObj);
\r
1507 if (provider == nullptr)
\r
1509 ThrowNSException(JNI_INVALID_VALUE, "Provider with Given Id doesn't exist");
\r
1510 return (jboolean)false;
\r
1512 NS_LOGD ("calling isSubscribe on ProviderID");
\r
1513 return (jboolean) provider->isSubscribed();
\r
1517 JNIEXPORT void JNICALL
\r
1518 Java_org_iotivity_service_ns_consumer_Provider_nativeDispose
\r
1519 (JNIEnv *env, jobject object)
\r
1521 jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));
\r
1522 if (!cls_provider)
\r
1524 NS_LOGE ("Failed to Get ObjectClass for Provider");
\r
1527 jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");
\r
1528 if (!nativeHandle)
\r
1530 NS_LOGE ("Failed to get nativeHandle for Provider");
\r
1533 jlong handle = env->GetLongField(object, nativeHandle);
\r
1534 JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =
\r
1535 reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(handle);
\r
1536 delete objectHolder;
\r
1541 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
\r
1543 NS_LOGD ("ConsumerService_JNI_OnLoad");
\r
1544 g_jvm_consumer = jvm;
\r
1546 JNIEnv *env = NULL;
\r
1547 if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
\r
1549 NS_LOGE ("Failed to get the environment using GetEnv()");
\r
1553 jclass localMessage = env->FindClass(
\r
1554 "org/iotivity/service/ns/common/Message");
\r
1555 if (!localMessage)
\r
1557 NS_LOGE ("Failed to get local Message class");
\r
1560 g_cls_Message = (jclass) (env->NewGlobalRef(localMessage));
\r
1561 if (!g_cls_Message)
\r
1563 NS_LOGE ("Failed to set Global Message reference");
\r
1567 jclass localProvider = env->FindClass(
\r
1568 "org/iotivity/service/ns/consumer/Provider");
\r
1569 if (!localProvider)
\r
1571 NS_LOGE ("Failed to get local Provider class");
\r
1574 g_cls_Provider = (jclass) (env->NewGlobalRef(localProvider));
\r
1575 if (!g_cls_Provider)
\r
1577 NS_LOGE ("Failed to set Global Provider reference");
\r
1581 jclass localSyncInfo = env->FindClass(
\r
1582 "org/iotivity/service/ns/common/SyncInfo");
\r
1583 if (!localSyncInfo)
\r
1585 NS_LOGE ("Failed to get local SyncInfo class");
\r
1588 g_cls_SyncInfo = (jclass) (env->NewGlobalRef(localSyncInfo));
\r
1589 if (!g_cls_SyncInfo)
\r
1591 NS_LOGE ("Failed to set Global NSSyncInfo reference");
\r
1595 jclass localSyncType = env->FindClass(
\r
1596 "org/iotivity/service/ns/common/SyncInfo$SyncType");
\r
1597 if (!localSyncType)
\r
1599 NS_LOGE ("Failed to get local SyncType enum");
\r
1602 g_cls_SyncType = (jclass) (env->NewGlobalRef(localSyncType));
\r
1603 if (!g_cls_SyncType)
\r
1605 NS_LOGE ("Failed to set Global SyncType reference");
\r
1609 jclass localMediaContents = env->FindClass(
\r
1610 "org/iotivity/service/ns/common/MediaContents");
\r
1611 if (!localMediaContents)
\r
1613 NS_LOGE ("Failed to get local MediaContents class");
\r
1616 g_cls_MediaContents = (jclass) (env->NewGlobalRef(localMediaContents));
\r
1617 if (!g_cls_MediaContents)
\r
1619 NS_LOGE ("Failed to set Global MediaContents reference");
\r
1622 jclass localTopicState = env->FindClass(
\r
1623 "org/iotivity/service/ns/common/Topic$TopicState");
\r
1624 if (!localTopicState)
\r
1626 NS_LOGE ("Failed to get local TopicState enum");
\r
1629 g_cls_TopicState = (jclass) (env->NewGlobalRef(localTopicState));
\r
1630 if (!g_cls_TopicState)
\r
1632 NS_LOGE ("Failed to set Global TopicState reference");
\r
1636 jclass localTopic = env->FindClass(
\r
1637 "org/iotivity/service/ns/common/Topic");
\r
1640 NS_LOGE ("Failed to get local TopicState enum");
\r
1643 g_cls_Topic = (jclass) (env->NewGlobalRef(localTopic));
\r
1646 NS_LOGE ("Failed to set Global Topic reference");
\r
1650 jclass localMessageType = env->FindClass(
\r
1651 "org/iotivity/service/ns/common/Message$MessageType");
\r
1652 if (!localMessageType)
\r
1654 NS_LOGE ("Failed to get local Message Type class");
\r
1657 g_cls_Message_Type = (jclass) (env->NewGlobalRef(localMessageType));
\r
1658 if (!g_cls_Message_Type)
\r
1660 NS_LOGE ("Failed to set Global Message Type reference");
\r
1664 jclass localProviderState = env->FindClass(
\r
1665 "org/iotivity/service/ns/consumer/Provider$ProviderState");
\r
1666 if (!localProviderState)
\r
1668 NS_LOGE ("Failed to get localProviderState Type class");
\r
1671 g_cls_ProviderState = (jclass) (env->NewGlobalRef(localProviderState));
\r
1672 if (!g_cls_ProviderState)
\r
1674 NS_LOGE ("Failed to set Global ProviderState Type reference");
\r
1678 jclass localTopicsList = env->FindClass(
\r
1679 "org/iotivity/service/ns/common/TopicsList");
\r
1680 if (!localTopicsList)
\r
1682 NS_LOGE ("Failed to get local Topic class");
\r
1685 g_cls_TopicsList = (jclass) (env->NewGlobalRef(localTopicsList));
\r
1686 if (!g_cls_TopicsList)
\r
1688 NS_LOGE ("Failed to set Global TopicsList reference");
\r
1691 //OcRepresentation
\r
1692 jclass localOcRepresentation = env->FindClass("org/iotivity/base/OcRepresentation");
\r
1693 if (!localOcRepresentation)
\r
1695 NS_LOGE ("Failed to get local OcRepresentation class");
\r
1698 g_cls_OcRepresentation = (jclass) env->NewGlobalRef(localOcRepresentation);
\r
1699 if (!g_cls_OcRepresentation)
\r
1701 NS_LOGE ("Failed to set Global OcRepresentation reference");
\r
1705 g_mid_OcRepresentation_N_ctor_bool = env->GetMethodID(g_cls_OcRepresentation, "<init>", "(JZ)V");
\r
1706 if (!g_mid_OcRepresentation_N_ctor_bool)
\r
1708 NS_LOGE ("Failed to get Global OcRepresentation Constructor reference");
\r
1712 env->DeleteLocalRef(localMessage);
\r
1713 env->DeleteLocalRef(localProvider);
\r
1714 env->DeleteLocalRef(localSyncInfo);
\r
1715 env->DeleteLocalRef(localSyncType);
\r
1716 env->DeleteLocalRef(localMediaContents);
\r
1717 env->DeleteLocalRef(localTopicState);
\r
1718 env->DeleteLocalRef(localMessageType);
\r
1719 env->DeleteLocalRef(localProviderState);
\r
1720 env->DeleteLocalRef(localTopic);
\r
1721 env->DeleteLocalRef(localTopicsList);
\r
1722 env->DeleteLocalRef(localOcRepresentation);
\r
1724 return NSExceptionInit(env);
\r
1727 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved)
\r
1729 NS_LOGI ("ConsumerService_JNI_OnUnload");
\r
1730 JNIEnv *env = NULL;
\r
1732 if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
\r
1734 NS_LOGE ("Failed to get the environment using GetEnv()");
\r
1738 env->DeleteGlobalRef(g_cls_Message);
\r
1739 env->DeleteGlobalRef(g_cls_Provider);
\r
1740 env->DeleteGlobalRef(g_cls_SyncInfo);
\r
1741 env->DeleteGlobalRef(g_cls_SyncType);
\r
1742 env->DeleteGlobalRef(g_cls_MediaContents);
\r
1743 env->DeleteGlobalRef(g_cls_TopicState);
\r
1744 env->DeleteGlobalRef(g_cls_Message_Type);
\r
1745 env->DeleteGlobalRef(g_cls_ProviderState);
\r
1746 env->DeleteGlobalRef(g_cls_Topic);
\r
1747 env->DeleteGlobalRef(g_cls_TopicsList);
\r
1748 env->DeleteGlobalRef(g_cls_OcRepresentation);
\r