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
24 static JavaVM *g_jvm = NULL;
\r
26 static jobject g_obj_postListener = NULL;
\r
27 static jobject g_obj_discoverListener = NULL;
\r
28 static jobject g_obj_syncListener = NULL;
\r
29 static jobject g_obj_acceptListener = NULL;
\r
31 jclass g_cls_Message;
\r
32 jclass g_cls_Provider;
\r
33 jclass g_cls_SyncInfo;
\r
34 jclass g_cls_MediaContents;
\r
36 static JNIEnv *GetJNIEnv(jint *ret)
\r
40 *ret = g_jvm->GetEnv((void **) &env, JNI_CURRENT_VERSION);
\r
46 if (g_jvm->AttachCurrentThread(&env, NULL) != JNI_OK)
\r
48 LOGE ("Failed to get the environment");
\r
56 LOGE ("JNI version is not supported");
\r
58 LOGE ("Failed to get the environment");
\r
63 void onDiscoverProvider(OIC::Service::NSProvider *provider)
\r
65 LOGD ("ConsumerService_onDiscoverProvider");
\r
68 JNIEnv *env = GetJNIEnv(&envRet);
\r
69 if (NULL == env) return ;
\r
71 jobject jDiscoverListener = (jobject) env->NewLocalRef(g_obj_discoverListener);
\r
72 if (!jDiscoverListener)
\r
74 LOGE ("Failed to Get jDiscoverListener");
\r
75 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
79 LOGD ("ProviderId : %s\n", provider->getProviderId().c_str());
\r
81 jstring jProviderId = env->NewStringUTF(provider->getProviderId().c_str());
\r
82 jlong pProvider = (long)provider;
\r
84 jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));
\r
87 LOGE ("Failed to Get ObjectClass for Provider");
\r
88 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
91 jmethodID mid_provider = env->GetMethodID(
\r
92 cls_provider, "<init>", "(Ljava/lang/String;)V");
\r
95 LOGE ("Failed to Get MethodID for Provider<init>");
\r
96 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
99 jobject obj_provider = env->NewObject(cls_provider, mid_provider,
\r
102 jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");
\r
105 LOGE("Failed to get nativeHandle for Provider");
\r
108 env->SetLongField(obj_provider, nativeHandle, pProvider);
\r
110 jclass cls = env->GetObjectClass(jDiscoverListener);
\r
113 LOGE ("Failed to Get ObjectClass for jDiscoverListener");
\r
114 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
117 jmethodID mid = env->GetMethodID(
\r
119 "onProviderDiscovered",
\r
120 "(Lorg/iotivity/service/ns/consumer/Provider;)V");
\r
123 LOGE ("Failed to Get MethodID for onProviderDiscovered");
\r
124 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
128 env->CallVoidMethod(jDiscoverListener, mid, obj_provider);
\r
130 env->DeleteLocalRef(jDiscoverListener);
\r
131 env->DeleteLocalRef(cls_provider);
\r
132 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
136 void onProviderChanged(OIC::Service::NSProvider *provider,OIC::Service::NSResponse response)
\r
138 LOGD ("ConsumerService_onSubscriptionAccepted");
\r
141 JNIEnv *env = GetJNIEnv(&envRet);
\r
142 if (NULL == env) return ;
\r
144 jobject jAcceptListener = (jobject) env->NewLocalRef(g_obj_acceptListener);
\r
145 if (!jAcceptListener)
\r
147 LOGE ("Failed to Get jAcceptListener");
\r
148 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
152 LOGD ("ProviderId : %s\n", provider->getProviderId().c_str());
\r
154 jstring jProviderId = env->NewStringUTF(provider->getProviderId().c_str());
\r
155 jlong pProvider = (long)provider;
\r
157 jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));
\r
160 LOGE ("Failed to Get ObjectClass for Provider");
\r
161 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
164 jmethodID mid_provider = env->GetMethodID(
\r
165 cls_provider, "<init>", "(Ljava/lang/String;)V");
\r
168 LOGE ("Failed to Get MethodID for Provider<init>");
\r
169 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
172 jobject obj_provider = env->NewObject(cls_provider, mid_provider,
\r
175 jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");
\r
178 LOGE("Failed to get nativeHandle for Provider");
\r
181 env->SetLongField(obj_provider, nativeHandle, pProvider);
\r
183 jclass cls = env->GetObjectClass(jAcceptListener);
\r
186 LOGE ("Failed to Get ObjectClass for jAcceptListener");
\r
187 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
190 //TODO: Modify to call ProviderChanged Cb adding topic in Java
\r
191 jmethodID mid = env->GetMethodID(
\r
193 "onSubscriptionAccepted",
\r
194 "(Lorg/iotivity/service/ns/consumer/Provider;)V");
\r
197 LOGE ("Failed to Get MethodID for onSubscriptionAccepted");
\r
198 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
202 env->CallVoidMethod(jAcceptListener, mid, obj_provider);
\r
204 env->DeleteLocalRef(jAcceptListener);
\r
205 env->DeleteLocalRef(cls_provider);
\r
206 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
211 jobject getJavaMessageType(JNIEnv *env, OIC::Service::NSMessage::NSMessageType type)
\r
215 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_ALERT:
\r
217 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message,
\r
218 "ALERT", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
219 return env->GetStaticObjectField(g_cls_Message, fieldID);
\r
221 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_NOTICE:
\r
223 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message,
\r
224 "NOTICE", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
225 return env->GetStaticObjectField(g_cls_Message, fieldID);
\r
227 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_EVENT:
\r
229 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message,
\r
230 "EVENT", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
231 return env->GetStaticObjectField(g_cls_Message, fieldID);
\r
233 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_INFO:
\r
235 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message,
\r
236 "INFO", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
237 return env->GetStaticObjectField(g_cls_Message, fieldID);
\r
245 void onMessagePosted(OIC::Service::NSMessage *message)
\r
247 LOGD ("ConsumerService_onMessagePosted");
\r
250 JNIEnv *env = GetJNIEnv(&envRet);
\r
251 if (NULL == env) return ;
\r
253 jobject jPostListener = (jobject) env->NewLocalRef(g_obj_postListener);
\r
254 if (!jPostListener)
\r
256 LOGE ("Failed to Get jPostListener");
\r
257 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
261 LOGD ("id : %llu\n", message->getMessageId());
\r
262 LOGD ("title : %s\n", message->getTitle().c_str());
\r
263 LOGD ("content : %s\n", message->getContentText().c_str());
\r
264 LOGD ("source : %s\n", message->getSourceName().c_str());
\r
266 jlong jMessageId = (jlong) message->getMessageId();
\r
267 jstring jProviderId = env->NewStringUTF(message->getProviderId().c_str());
\r
268 jstring jTitle = env->NewStringUTF(message->getTitle().c_str());
\r
269 jstring jContentText = env->NewStringUTF(message->getContentText().c_str());
\r
270 jstring jSourceName = env->NewStringUTF(message->getSourceName().c_str());
\r
272 jstring jTime = env->NewStringUTF(message->getTime().c_str());
\r
273 jlong jTTL = (jlong) message->getTTL();
\r
275 jlong pMessage = (long) message;
\r
277 jclass cls_message = (jclass) (env->NewLocalRef(g_cls_Message));
\r
280 LOGE ("Failed to Get ObjectClass for Message");
\r
281 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
284 jmethodID mid_message = env->GetMethodID(
\r
285 cls_message, "<init>",
\r
286 "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
\r
289 LOGE ("Failed to Get MethodID for Message<init>");
\r
290 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
293 jobject obj_message = env->NewObject(cls_message, mid_message,
\r
294 jTitle, jContentText, jSourceName);
\r
296 jfieldID fid_nativeHandle = env->GetFieldID(cls_message, "mNativeHandle", "J");
\r
297 if (!fid_nativeHandle)
\r
299 LOGE("Failed to get nativeHandle for Message");
\r
302 env->SetLongField(obj_message, fid_nativeHandle, pMessage);
\r
304 jfieldID fid_messageId = env->GetFieldID(cls_message, "mMessageId", "J");
\r
305 if (!fid_messageId)
\r
307 LOGE("Failed to get field MessageID for Message");
\r
310 env->SetLongField(obj_message, fid_messageId, jMessageId);
\r
312 jfieldID fid_providerId = env->GetFieldID(cls_message, "mProviderId", "Ljava/lang/String;");
\r
313 if (!fid_providerId)
\r
315 LOGE("Failed to get field ProviderID for Message");
\r
318 env->SetObjectField(obj_message, fid_providerId, jProviderId);
\r
320 jfieldID fid_time = env->GetFieldID(cls_message, "mTime", "Ljava/lang/String;");
\r
323 LOGE("Failed to get field Time for Message");
\r
326 env->SetObjectField(obj_message, fid_time, jTime);
\r
328 jfieldID fid_ttl = env->GetFieldID(cls_message, "mTTL", "J");
\r
331 LOGE("Failed to get field TTL for Message");
\r
334 env->SetLongField(obj_message, fid_ttl, jTTL);
\r
336 OIC::Service::NSMediaContents *mediaCont = message->getMediaContents();
\r
337 if (mediaCont != nullptr)
\r
339 jstring jIconImage = env->NewStringUTF(mediaCont->getIconImage().c_str());
\r
340 jclass cls_mediaContents = (jclass) (env->NewLocalRef(g_cls_MediaContents));
\r
341 if (!cls_mediaContents)
\r
343 LOGE ("Failed to Get ObjectClass for MediaContents");
\r
344 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
347 jmethodID mid_mediaContents = env->GetMethodID(
\r
348 cls_mediaContents, "<init>", "(Ljava/lang/String;)V");
\r
349 if (!mid_mediaContents)
\r
351 LOGE ("Failed to Get MethodID for MediaContents<init>");
\r
352 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
355 jobject obj_mediaContents = env->NewObject(cls_mediaContents, mid_mediaContents,
\r
358 jfieldID fid_mediaContents = env->GetFieldID(cls_message, "mMediaContents",
\r
359 "Lorg/iotivity/service/ns/common/MediaContents;");
\r
360 if (!fid_mediaContents)
\r
362 LOGE("Failed to get field mediaContents for Message");
\r
365 env->SetObjectField(obj_message, fid_mediaContents, obj_mediaContents);
\r
369 jobject jType = getJavaMessageType(env, message->getType());
\r
372 LOGE("Failed to get Type value for Message");
\r
375 jfieldID fid_type = env->GetFieldID(cls_message, "mType",
\r
376 "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
379 LOGE("Failed to get field Type for Message");
\r
382 env->SetObjectField(obj_message, fid_type, jType);
\r
385 jclass cls = env->GetObjectClass(jPostListener);
\r
388 LOGE ("Failed to Get ObjectClass for jPostListener");
\r
389 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
392 jmethodID mid = env->GetMethodID(
\r
394 "onMessageReceived",
\r
395 "(Lorg/iotivity/service/ns/common/Message;)V");
\r
398 LOGE ("Failed to Get MethodID for onMessageReceived");
\r
399 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
403 env->CallVoidMethod(jPostListener, mid, obj_message);
\r
405 env->DeleteLocalRef(jPostListener);
\r
406 env->DeleteLocalRef(cls_message);
\r
407 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
411 void onSyncInfoReceived(OIC::Service::NSSyncInfo *sync)
\r
413 LOGD ("ConsumerService_onSyncInfoReceived");
\r
416 JNIEnv *env = GetJNIEnv(&envRet);
\r
417 if (NULL == env) return ;
\r
419 jobject jSyncListener = (jobject) env->NewLocalRef(g_obj_syncListener);
\r
420 if (!jSyncListener)
\r
422 LOGE ("Failed to Get jSyncListener");
\r
423 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
427 LOGD ("Sync ID : %llu\n", sync->getMessageId());
\r
428 LOGD ("Sync ProviderId : %s\n", sync->getProviderId().c_str());
\r
429 LOGD ("Sync STATE : %d\n", (int) sync->getState());
\r
431 jlong jMessageId = (jlong) sync->getMessageId();
\r
432 jstring jProviderId = env->NewStringUTF(sync->getProviderId().c_str());
\r
433 jint jState = (jint) sync->getState();
\r
435 jclass cls_sync = (jclass) (env->NewLocalRef(g_cls_SyncInfo));
\r
438 LOGE ("Failed to Get ObjectClass for SyncInfo");
\r
439 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
442 jmethodID mid_sync = env->GetMethodID(
\r
443 cls_sync, "<init>", "(JLjava/lang/String;I)V");
\r
446 LOGE ("Failed to Get MethodID for SyncInfo<init>");
\r
447 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
450 jobject obj_sync = env->NewObject(cls_sync, mid_sync,
\r
451 jMessageId, jProviderId, jState);
\r
453 jclass cls = env->GetObjectClass(jSyncListener);
\r
456 LOGE ("Failed to Get ObjectClass for jSyncListener");
\r
457 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
460 jmethodID mid = env->GetMethodID(
\r
462 "onSyncInfoReceived",
\r
463 "(Lorg/iotivity/service/ns/common/SyncInfo;)V");
\r
466 LOGE ("Failed to Get MethodID for onSyncInfoReceived");
\r
467 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
471 env->CallVoidMethod(jSyncListener, mid, obj_sync);
\r
473 env->DeleteLocalRef(jSyncListener);
\r
474 env->DeleteLocalRef(cls_sync);
\r
475 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
479 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStart
\r
480 (JNIEnv *env, jobject jObj, jobject jDiscoverListener, jobject jAccpetListener)
\r
482 LOGD ("ConsumerService_StartConsumer");
\r
483 if (!jDiscoverListener || !jAccpetListener)
\r
485 ThrowNSException(NS_ERROR, "Listener cannot be null");
\r
489 if (g_obj_discoverListener != NULL)
\r
491 env->DeleteGlobalRef(g_obj_discoverListener);
\r
493 if (g_obj_acceptListener != NULL)
\r
495 env->DeleteGlobalRef(g_obj_acceptListener);
\r
498 g_obj_discoverListener = (jobject) env->NewGlobalRef(jDiscoverListener);
\r
499 g_obj_acceptListener = (jobject) env->NewGlobalRef(jAccpetListener);
\r
501 OIC::Service::NSConsumerService::ConsumerConfig cfg;
\r
502 cfg.m_discoverCb = onDiscoverProvider;
\r
503 cfg.m_changedCb = onProviderChanged;
\r
505 OIC::Service::NSConsumerService::getInstance()->Start(cfg);
\r
509 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStop
\r
510 (JNIEnv *env, jobject jObj)
\r
512 LOGD ("ConsumerService_StopConsumer");
\r
514 env->DeleteGlobalRef(g_obj_postListener);
\r
515 env->DeleteGlobalRef(g_obj_discoverListener);
\r
516 env->DeleteGlobalRef(g_obj_syncListener);
\r
517 env->DeleteGlobalRef(g_obj_acceptListener);
\r
518 g_obj_postListener = NULL;
\r
519 g_obj_discoverListener = NULL;
\r
520 g_obj_syncListener = NULL;
\r
521 g_obj_acceptListener = NULL;
\r
522 OIC::Service::NSConsumerService::getInstance()->Stop();
\r
525 JNIEXPORT jint JNICALL
\r
526 Java_org_iotivity_service_ns_consumer_ConsumerService_nativeEnableRemoteService
\r
527 (JNIEnv *env, jobject jObj, jstring jServerAddress)
\r
529 LOGD ("ConsumerService_EnableRemoteService");
\r
530 if (!jServerAddress)
\r
532 ThrowNSException(NS_ERROR, "EnableRemoteService server address NULL");
\r
533 return (jint) OIC::Service::NSResult::ERROR;
\r
535 const char *serverAddress = env->GetStringUTFChars(jServerAddress, 0);
\r
536 OIC::Service::NSResult res =
\r
537 OIC::Service::NSConsumerService::getInstance()->EnableRemoteService(std::string(serverAddress));
\r
538 env->ReleaseStringUTFChars(jServerAddress, serverAddress);
\r
542 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeRescanProvider
\r
543 (JNIEnv *env, jobject jObj)
\r
545 LOGD ("ConsumerService_RescanProvider");
\r
547 OIC::Service::NSConsumerService::getInstance()->RescanProvider();
\r
550 JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeGetProvider
\r
551 (JNIEnv *env, jobject jObj, jstring jProviderId)
\r
553 LOGD ("ConsumerService_GetProvider");
\r
556 ThrowNSException(NS_ERROR, "ProviderId cannot be null");
\r
560 const char *providerId = env->GetStringUTFChars(jProviderId, 0);
\r
562 OIC::Service::NSProvider *provider =
\r
563 OIC::Service::NSConsumerService::getInstance()->getProvider(std::string(providerId));
\r
564 if (provider == nullptr)
\r
566 ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");
\r
570 LOGD ("ProviderId : %s\n", provider->getProviderId().c_str());
\r
572 jProviderId = env->NewStringUTF(provider->getProviderId().c_str());
\r
573 jlong pProvider = (long)provider;
\r
575 jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));
\r
578 LOGE ("Failed to Get ObjectClass for Provider");
\r
581 jmethodID mid_provider = env->GetMethodID(
\r
582 cls_provider, "<init>", "(Ljava/lang/String;)V");
\r
585 LOGE ("Failed to Get MethodID for Provider<init>");
\r
588 jobject obj_provider = env->NewObject(cls_provider, mid_provider,
\r
591 jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");
\r
594 ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");
\r
597 env->SetLongField(obj_provider, nativeHandle, pProvider);
\r
599 env->DeleteLocalRef(cls_provider);
\r
600 env->ReleaseStringUTFChars(jProviderId, providerId);
\r
602 return obj_provider;
\r
605 OIC::Service::NSProvider *getNativeProvider(JNIEnv *env, jobject jObj)
\r
607 jclass providerClass = env->GetObjectClass(jObj);
\r
608 if (!providerClass)
\r
610 ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");
\r
613 jfieldID jproviderId = env->GetFieldID(providerClass, "mProviderId", "Ljava/lang/String;");
\r
616 ThrowNSException(NS_ERROR, "Failed to get providerId for Provider");
\r
619 jstring jprovider_id = (jstring) env->GetObjectField(jObj, jproviderId);
\r
622 ThrowNSException(NS_ERROR, "ProviderId cannot be null");
\r
626 const char *providerId = env->GetStringUTFChars(jprovider_id, 0);
\r
627 LOGD ("ProviderId : %s\n", providerId);
\r
629 OIC::Service::NSProvider *provider =
\r
630 OIC::Service::NSConsumerService::getInstance()->getProvider(std::string(providerId));
\r
631 if (provider == nullptr)
\r
633 ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");
\r
636 env->ReleaseStringUTFChars(jprovider_id, providerId);
\r
640 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSubscribe
\r
641 (JNIEnv *env, jobject jObj)
\r
643 LOGD ("Provider_Subscribe");
\r
644 jclass providerClass = env->GetObjectClass(jObj);
\r
645 if (!providerClass)
\r
647 ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");
\r
651 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
654 ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");
\r
657 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
660 LOGD ("calling subscribe on mNativeHandle");
\r
661 OIC::Service::NSProvider *provider = (OIC::Service::NSProvider *) (jProvider);
\r
662 provider->subscribe();
\r
666 OIC::Service::NSProvider *provider = getNativeProvider(env, jObj);
\r
667 if (provider == nullptr)
\r
669 ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");
\r
672 LOGD ("calling subscribe on ProviderID");
\r
673 provider->subscribe();
\r
677 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeUnsubscribe
\r
678 (JNIEnv *env, jobject jObj)
\r
680 LOGD ("Provider_Unsubscribe");
\r
682 jclass providerClass = env->GetObjectClass(jObj);
\r
683 if (!providerClass)
\r
685 ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");
\r
689 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
692 ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");
\r
695 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
698 LOGD ("calling unSubscribe on mNativeHandle");
\r
699 OIC::Service::NSProvider *provider = (OIC::Service::NSProvider *) (jProvider);
\r
700 provider->unSubscribe();
\r
704 OIC::Service::NSProvider *provider = getNativeProvider(env, jObj);
\r
705 if (provider == nullptr)
\r
707 ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");
\r
710 LOGD ("calling unSubscribe on ProviderID");
\r
711 provider->unSubscribe();
\r
715 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSendSyncInfo
\r
716 (JNIEnv *env, jobject jObj, jlong jMessageId, jint jSyncType)
\r
718 LOGD ("Provider_SendSyncInfo");
\r
721 ThrowNSException(NS_ERROR, "MessageId cannot be 0");
\r
725 jclass providerClass = env->GetObjectClass(jObj);
\r
726 if (!providerClass)
\r
728 ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");
\r
732 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
735 ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");
\r
738 uint64_t messageId = (uint64_t) jMessageId;
\r
740 LOGD("!!!!!!jMessageId: %lld", jMessageId);
\r
741 LOGD("!!!!!!messageId: %lld", messageId);
\r
743 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
746 LOGD ("calling SendSyncInfo on mNativeHandle");
\r
747 OIC::Service::NSProvider *provider = (OIC::Service::NSProvider *) (jProvider);
\r
748 provider->SendSyncInfo(messageId, (OIC::Service::NSSyncInfo::NSSyncType)jSyncType);
\r
752 OIC::Service::NSProvider *provider = getNativeProvider(env, jObj);
\r
753 if (provider == nullptr)
\r
755 ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");
\r
758 LOGD ("calling SendSyncInfo on ProviderID");
\r
759 provider->SendSyncInfo(messageId, (OIC::Service::NSSyncInfo::NSSyncType)jSyncType);
\r
763 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSetListener
\r
764 (JNIEnv *env, jobject jObj, jobject jPostListener, jobject jSyncListener)
\r
766 LOGD ("Provider_SetListener");
\r
767 if (!jPostListener || !jSyncListener)
\r
769 ThrowNSException(NS_ERROR, "Listener cannot be null");
\r
773 jclass providerClass = env->GetObjectClass(jObj);
\r
774 if (!providerClass)
\r
776 ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");
\r
780 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
783 ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");
\r
786 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
789 LOGD ("calling SetListener on mNativeHandle");
\r
790 if (g_obj_postListener != NULL)
\r
792 env->DeleteGlobalRef(g_obj_postListener);
\r
794 if (g_obj_syncListener != NULL)
\r
796 env->DeleteGlobalRef(g_obj_syncListener);
\r
798 g_obj_syncListener = NULL;
\r
799 g_obj_acceptListener = NULL;
\r
800 g_obj_postListener = (jobject) env->NewGlobalRef(jPostListener);
\r
801 g_obj_syncListener = (jobject) env->NewGlobalRef(jSyncListener);
\r
803 OIC::Service::NSProvider *provider = (OIC::Service::NSProvider *) (jProvider);
\r
804 provider->setListener(onMessagePosted, onSyncInfoReceived);
\r
808 OIC::Service::NSProvider *provider = getNativeProvider(env, jObj);
\r
809 if (provider == nullptr)
\r
811 ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");
\r
814 LOGD ("calling SetListener on ProviderID");
\r
815 if (g_obj_postListener != NULL)
\r
817 env->DeleteGlobalRef(g_obj_postListener);
\r
819 if (g_obj_syncListener != NULL)
\r
821 env->DeleteGlobalRef(g_obj_syncListener);
\r
823 g_obj_syncListener = NULL;
\r
824 g_obj_acceptListener = NULL;
\r
825 g_obj_postListener = (jobject) env->NewGlobalRef(jPostListener);
\r
826 g_obj_syncListener = (jobject) env->NewGlobalRef(jSyncListener);
\r
828 provider->setListener(onMessagePosted, onSyncInfoReceived);
\r
833 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
\r
835 LOGD("ConsumerService_JNI_OnLoad");
\r
839 if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
\r
841 LOGE("Failed to get the environment using GetEnv()");
\r
845 jclass localMessage = env->FindClass(
\r
846 "org/iotivity/service/ns/common/Message");
\r
849 LOGE("Failed to get local Message class");
\r
852 g_cls_Message = (jclass) (env->NewGlobalRef(localMessage));
\r
853 if (!g_cls_Message)
\r
855 LOGE("Failed to set Global Message reference");
\r
859 jclass localProvider = env->FindClass(
\r
860 "org/iotivity/service/ns/consumer/Provider");
\r
861 if (!localProvider)
\r
863 LOGE("Failed to get local Provider class");
\r
866 g_cls_Provider = (jclass) (env->NewGlobalRef(localProvider));
\r
867 if (!g_cls_Provider)
\r
869 LOGE("Failed to set Global Provider reference");
\r
873 jclass localSyncInfo = env->FindClass(
\r
874 "org/iotivity/service/ns/common/SyncInfo");
\r
875 if (!localSyncInfo)
\r
877 LOGE("Failed to get local SyncInfo class");
\r
880 g_cls_SyncInfo = (jclass) (env->NewGlobalRef(localSyncInfo));
\r
881 if (!g_cls_SyncInfo)
\r
883 LOGE("Failed to set Global NSSyncInfo reference");
\r
887 jclass localMediaContents = env->FindClass(
\r
888 "org/iotivity/service/ns/common/MediaContents");
\r
889 if (!localMediaContents)
\r
891 LOGE("Failed to get local MediaContents class");
\r
894 g_cls_MediaContents = (jclass) (env->NewGlobalRef(localMediaContents));
\r
895 if (!g_cls_MediaContents)
\r
897 LOGE("Failed to set Global MediaContents reference");
\r
901 env->DeleteLocalRef(localMessage);
\r
902 env->DeleteLocalRef(localProvider);
\r
903 env->DeleteLocalRef(localSyncInfo);
\r
904 env->DeleteLocalRef(localMediaContents);
\r
906 return NSExceptionInit(env);
\r
909 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved)
\r
911 LOGI("ConsumerService_JNI_OnUnload");
\r
914 if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
\r
916 LOGE("Failed to get the environment using GetEnv()");
\r
920 env->DeleteGlobalRef(g_cls_Message);
\r
921 env->DeleteGlobalRef(g_cls_Provider);
\r
922 env->DeleteGlobalRef(g_cls_SyncInfo);
\r
923 env->DeleteGlobalRef(g_cls_MediaContents);
\r