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
35 jclass g_cls_TopicState;
\r
36 jclass g_cls_Message_Type;
\r
37 jclass g_cls_Response;
\r
39 jclass g_cls_TopicsList;
\r
41 static JNIEnv *GetJNIEnv(jint *ret)
\r
45 *ret = g_jvm->GetEnv((void **) &env, JNI_CURRENT_VERSION);
\r
51 if (g_jvm->AttachCurrentThread(&env, NULL) != JNI_OK)
\r
53 LOGE ("Failed to get the environment");
\r
61 LOGE ("JNI version is not supported");
\r
63 LOGE ("Failed to get the environment");
\r
68 jobject getJavaMessageType(JNIEnv *env, OIC::Service::NSMessage::NSMessageType type)
\r
70 LOGD ("ConsumerService_getJavaMessageType - IN");
\r
73 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_ALERT:
\r
75 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message,
\r
76 "ALERT", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
77 return env->GetStaticObjectField(g_cls_Message, fieldID);
\r
79 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_NOTICE:
\r
81 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message,
\r
82 "NOTICE", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
83 return env->GetStaticObjectField(g_cls_Message, fieldID);
\r
85 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_EVENT:
\r
87 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message,
\r
88 "EVENT", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
89 return env->GetStaticObjectField(g_cls_Message, fieldID);
\r
91 case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_INFO:
\r
93 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message,
\r
94 "INFO", "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
95 return env->GetStaticObjectField(g_cls_Message, fieldID);
\r
100 LOGD ("ConsumerService_getJavaMessageType - OUT");
\r
104 jobject getJavaState(JNIEnv *env, OIC::Service::NSTopic::NSTopicState nsState)
\r
106 LOGD ("ConsumerService_getJavaState - IN");
\r
109 jclass cls_topicState = (jclass) (env->NewLocalRef(g_cls_TopicState));
\r
110 if (!cls_topicState)
\r
112 LOGE ("Failed to Get ObjectClass for TopicState Type");
\r
116 jobject obj_topicState;
\r
119 case OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED:
\r
121 static jfieldID fieldID = env->GetStaticFieldID(cls_topicState,
\r
122 "UNSUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;");
\r
123 obj_topicState = env->GetStaticObjectField(cls_topicState, fieldID);
\r
125 case OIC::Service::NSTopic::NSTopicState::SUBSCRIBED:
\r
127 static jfieldID fieldID = env->GetStaticFieldID(cls_topicState,
\r
128 "SUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;");
\r
129 obj_topicState = env->GetStaticObjectField(cls_topicState, fieldID);
\r
133 if (obj_topicState == NULL)
\r
135 LOGE("Error: object of field TopicState is null");
\r
139 env->DeleteLocalRef(cls_topicState);
\r
140 LOGD ("ConsumerService_getJavaState - OUT");
\r
141 return obj_topicState;
\r
145 jobject getJavaTopicsList(JNIEnv *env, OIC::Service::NSTopicsList *topicList)
\r
147 LOGD ("ConsumerService_getJavaTopicsList - IN");
\r
148 jclass cls_topicList = (jclass) (env->NewLocalRef(g_cls_TopicsList));
\r
149 if (!cls_topicList)
\r
151 LOGE ("Failed to Get ObjectClass for TopicsList");
\r
154 jmethodID mid_topicList = env->GetMethodID(cls_topicList, "<init>", "()V");
\r
155 if (!mid_topicList)
\r
157 LOGE ("Failed to Get MethodID for TopicsList<init>");
\r
160 jobject obj_topicList = env->NewObject(cls_topicList, mid_topicList);
\r
161 jmethodID mid_addTopic =
\r
162 env->GetMethodID(cls_topicList, "addTopic", "(Lorg/iotivity/service/ns/common/Topic;)V");
\r
163 for (auto it : topicList->getTopicsList())
\r
165 jobject jState = getJavaState(env, it->getState());
\r
166 std::string topicName = it->getTopicName();
\r
167 jstring jTopicName = env->NewStringUTF(topicName.c_str());
\r
168 env->CallVoidMethod(obj_topicList, mid_addTopic, jTopicName, jState);
\r
170 env->DeleteLocalRef(cls_topicList);
\r
171 LOGD ("ConsumerService_getJavaTopicsList - OUT");
\r
172 return obj_topicList;
\r
175 OIC::Service::NSTopic::NSTopicState getNativeState(JNIEnv *env, jobject jTopic)
\r
177 LOGD ("ConsumerService_getNativeState - IN");
\r
179 jclass cls_topic = env->GetObjectClass( jTopic);
\r
181 jclass cls_TopicState = (jclass) (env->NewLocalRef(g_cls_TopicState));
\r
182 if (!cls_TopicState)
\r
184 LOGE ("Failed to Get ObjectClass for cls_TopicState Type");
\r
185 ThrowNSException(NS_ERROR, "TopicState class not found ");
\r
186 return OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED;
\r
188 jmethodID mid = env->GetMethodID(cls_TopicState, "ordinal", "()I");
\r
189 jfieldID fid_state = env->GetFieldID( cls_TopicState, "mState",
\r
190 "Lorg/iotivity/service/ns/common/Topic$TopicState;");
\r
191 if (fid_state == NULL)
\r
193 LOGE("Error: jfieldID for state type is null");
\r
194 ThrowNSException(NS_ERROR, "TopicState fid not found ");
\r
195 return OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED;
\r
197 jobject jobj = env->GetObjectField( jTopic, fid_state);
\r
200 LOGE("Error: object of field state Type is null");
\r
201 ThrowNSException(NS_ERROR, "TopicState obj is null ");
\r
202 return OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED;
\r
204 jint jState = env->CallIntMethod(jobj, mid);
\r
205 OIC::Service::NSTopic::NSTopicState state = (OIC::Service::NSTopic::NSTopicState) jState;
\r
206 LOGD ("ConsumerService_getNativeState - OUT");
\r
211 const char *getNativeTopicName(JNIEnv *env, jobject jTopic)
\r
213 LOGD ("ConsumerService_getNativeTopicName - IN");
\r
214 jclass cls_topic = env->GetObjectClass( jTopic);
\r
215 jfieldID fid_name = env->GetFieldID( cls_topic, "mTopicname",
\r
216 "Ljava/lang/String;");
\r
217 if (fid_name == NULL)
\r
219 LOGE("Error: jfieldID for Topic Name is null");
\r
222 jstring jTopicName = (jstring) env->GetObjectField( jTopic, fid_name);
\r
223 const char *topicName;
\r
226 topicName = env->GetStringUTFChars( jTopicName, NULL);
\r
230 LOGI("Info: topicName is null");
\r
232 LOGD ("ConsumerService_getNativeTopicName - OUT");
\r
237 OIC::Service::NSTopicsList *getNativeTopicsList(JNIEnv *env, jobject jTopicList)
\r
239 LOGD ("ConsumerService_getNativeTopicsList - IN");
\r
241 jclass cls_topicList = env->GetObjectClass( jTopicList);
\r
242 jfieldID fid_list = env->GetFieldID( cls_topicList, "mTopicsList",
\r
243 "Ljava/util/Vector;");
\r
244 if (fid_list == NULL)
\r
246 LOGE("Error: jfieldID for Topic List is null");
\r
249 jobject jobj = env->GetObjectField( jTopicList, fid_list);
\r
252 LOGE("Error: object of field Topic List is null");
\r
255 jclass cls_vec = env->FindClass("java/util/Vector");
\r
256 jmethodID sizeMethod = env->GetMethodID(cls_vec, "size", "()I;");
\r
257 int size = env->CallIntMethod(jobj, sizeMethod);
\r
258 jmethodID getMethod = env->GetMethodID(cls_vec, "get", "(I)Ljava/lang/Object;");
\r
259 OIC::Service::NSTopicsList *nsTopicList = new OIC::Service::NSTopicsList();
\r
260 for (int index = 0; index < size; index++)
\r
262 jobject topicObj = env->CallObjectMethod(jobj, getMethod, index);
\r
263 const char *name = getNativeTopicName(env, topicObj);
\r
264 std::string topicName(name);
\r
265 OIC::Service::NSTopic::NSTopicState state = getNativeState(env, topicObj);
\r
266 nsTopicList->addTopic(topicName, state);
\r
269 env->DeleteLocalRef(cls_vec);
\r
270 env->DeleteLocalRef(cls_topicList);
\r
271 LOGD ("ConsumerService_getNativeTopicsList - OUT");
\r
272 return nsTopicList;
\r
275 jobject getJavaResponse(JNIEnv *env, OIC::Service::NSResponse response)
\r
277 LOGD ("ConsumerService_getJavaResponse - IN");
\r
280 case OIC::Service::NSResponse::ALLOW:
\r
282 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Response,
\r
283 "ALLOW", "Lorg/iotivity/service/ns/consumer/ConsumerService$Response;");
\r
284 return env->GetStaticObjectField(g_cls_Response, fieldID);
\r
286 case OIC::Service::NSResponse::DENY:
\r
288 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Response,
\r
289 "DENY", "Lorg/iotivity/service/ns/consumer/ConsumerService$Response;");
\r
290 return env->GetStaticObjectField(g_cls_Response, fieldID);
\r
292 case OIC::Service::NSResponse::TOPIC:
\r
294 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Response,
\r
295 "TOPIC", "Lorg/iotivity/service/ns/consumer/ConsumerService$Response;");
\r
296 return env->GetStaticObjectField(g_cls_Response, fieldID);
\r
301 LOGD ("ConsumerService_getJavaResponse - OUT");
\r
305 OIC::Service::NSProvider *getNativeProvider(JNIEnv *env, jobject jObj)
\r
307 LOGD ("ConsumerService_getNativeProvider - IN");
\r
308 jclass providerClass = env->GetObjectClass(jObj);
\r
309 if (!providerClass)
\r
311 ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");
\r
314 jfieldID jproviderId = env->GetFieldID(providerClass, "mProviderId", "Ljava/lang/String;");
\r
317 ThrowNSException(NS_ERROR, "Failed to get providerId for Provider");
\r
320 jstring jprovider_id = (jstring) env->GetObjectField(jObj, jproviderId);
\r
323 ThrowNSException(NS_ERROR, "ProviderId cannot be null");
\r
327 const char *providerId = env->GetStringUTFChars(jprovider_id, 0);
\r
328 LOGD ("ProviderId : %s\n", providerId);
\r
330 OIC::Service::NSProvider *provider =
\r
331 OIC::Service::NSConsumerService::getInstance()->getProvider(std::string(providerId));
\r
332 if (provider == nullptr)
\r
334 ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");
\r
337 env->ReleaseStringUTFChars(jprovider_id, providerId);
\r
338 LOGD ("ConsumerService_getNativeProvider - OUT");
\r
342 jobject getJavaProvider(JNIEnv *env, OIC::Service::NSProvider *provider)
\r
344 LOGD ("ConsumerService_getJavaProvider - IN");
\r
345 LOGD ("ProviderId : %s\n", provider->getProviderId().c_str());
\r
347 jstring jProviderId = env->NewStringUTF(provider->getProviderId().c_str());
\r
348 jlong pProvider = (long)provider;
\r
350 jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));
\r
353 LOGE ("Failed to Get ObjectClass for Provider");
\r
356 jmethodID mid_provider = env->GetMethodID(
\r
357 cls_provider, "<init>", "(Ljava/lang/String;)V");
\r
360 LOGE ("Failed to Get MethodID for Provider<init>");
\r
363 jobject obj_provider = env->NewObject(cls_provider, mid_provider, jProviderId);
\r
365 jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");
\r
368 LOGE("Failed to get nativeHandle for Provider");
\r
371 env->SetLongField(obj_provider, nativeHandle, pProvider);
\r
373 jfieldID fid_topic = env->GetFieldID(cls_provider, "mTopicsList",
\r
374 "Lorg/iotivity/service/ns/common/TopicsList");
\r
377 LOGE("Failed to get nativeHandle for Provider");
\r
380 jobject topicList = getJavaTopicsList(env, provider->getTopicList());
\r
381 env->SetObjectField(obj_provider, fid_topic, topicList);
\r
382 env->DeleteLocalRef(cls_provider);
\r
383 LOGD ("ConsumerService_getJavaProvider - OUT");
\r
384 return obj_provider;
\r
388 jobject getJavaMessage(JNIEnv *env, OIC::Service::NSMessage *message)
\r
390 LOGD ("ConsumerService_getJavaMessage - IN");
\r
392 LOGD ("id : %llu\n", message->getMessageId());
\r
393 LOGD ("title : %s\n", message->getTitle().c_str());
\r
394 LOGD ("content : %s\n", message->getContentText().c_str());
\r
395 LOGD ("source : %s\n", message->getSourceName().c_str());
\r
397 jlong jMessageId = (jlong) message->getMessageId();
\r
398 jstring jProviderId = env->NewStringUTF(message->getProviderId().c_str());
\r
399 jstring jTitle = env->NewStringUTF(message->getTitle().c_str());
\r
400 jstring jContentText = env->NewStringUTF(message->getContentText().c_str());
\r
401 jstring jSourceName = env->NewStringUTF(message->getSourceName().c_str());
\r
402 jstring jTopic = env->NewStringUTF(message->getTopic().c_str());
\r
404 jstring jTime = env->NewStringUTF(message->getTime().c_str());
\r
405 jlong jTTL = (jlong) message->getTTL();
\r
407 jlong pMessage = (long) message;
\r
409 jclass cls_message = (jclass) (env->NewLocalRef(g_cls_Message));
\r
412 LOGE ("Failed to Get ObjectClass for Message");
\r
415 jmethodID mid_message = env->GetMethodID(
\r
416 cls_message, "<init>",
\r
417 "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
\r
420 LOGE ("Failed to Get MethodID for Message<init>");
\r
423 jobject obj_message = env->NewObject(cls_message, mid_message,
\r
424 jTitle, jContentText, jSourceName);
\r
426 jfieldID fid_nativeHandle = env->GetFieldID(cls_message, "mNativeHandle", "J");
\r
427 if (!fid_nativeHandle)
\r
429 LOGE("Failed to get nativeHandle for Message");
\r
432 env->SetLongField(obj_message, fid_nativeHandle, pMessage);
\r
434 jfieldID fid_messageId = env->GetFieldID(cls_message, "mMessageId", "J");
\r
435 if (!fid_messageId)
\r
437 LOGE("Failed to get field MessageID for Message");
\r
440 env->SetLongField(obj_message, fid_messageId, jMessageId);
\r
442 jfieldID fid_providerId = env->GetFieldID(cls_message, "mProviderId", "Ljava/lang/String;");
\r
443 if (!fid_providerId)
\r
445 LOGE("Failed to get field ProviderID for Message");
\r
448 env->SetObjectField(obj_message, fid_providerId, jProviderId);
\r
450 jfieldID fid_time = env->GetFieldID(cls_message, "mTime", "Ljava/lang/String;");
\r
453 LOGE("Failed to get field Time for Message");
\r
456 env->SetObjectField(obj_message, fid_time, jTime);
\r
458 jfieldID fid_ttl = env->GetFieldID(cls_message, "mTTL", "J");
\r
461 LOGE("Failed to get field TTL for Message");
\r
464 env->SetLongField(obj_message, fid_ttl, jTTL);
\r
466 jfieldID fid_topic = env->GetFieldID(cls_message, "mTopic", "Ljava/lang/String;");
\r
469 LOGE("Failed to get mTopic for Message");
\r
472 env->SetObjectField(obj_message, fid_topic, jTopic);
\r
474 OIC::Service::NSMediaContents *mediaCont = message->getMediaContents();
\r
475 if (mediaCont != nullptr)
\r
477 jstring jIconImage = env->NewStringUTF(mediaCont->getIconImage().c_str());
\r
478 jclass cls_mediaContents = (jclass) (env->NewLocalRef(g_cls_MediaContents));
\r
479 if (!cls_mediaContents)
\r
481 LOGE ("Failed to Get ObjectClass for MediaContents");
\r
484 jmethodID mid_mediaContents = env->GetMethodID(
\r
485 cls_mediaContents, "<init>", "(Ljava/lang/String;)V");
\r
486 if (!mid_mediaContents)
\r
488 LOGE ("Failed to Get MethodID for MediaContents<init>");
\r
491 jobject obj_mediaContents = env->NewObject(cls_mediaContents, mid_mediaContents,
\r
494 jfieldID fid_mediaContents = env->GetFieldID(cls_message, "mMediaContents",
\r
495 "Lorg/iotivity/service/ns/common/MediaContents;");
\r
496 if (!fid_mediaContents)
\r
498 LOGE("Failed to get field mediaContents for Message");
\r
501 env->SetObjectField(obj_message, fid_mediaContents, obj_mediaContents);
\r
505 jobject jType = getJavaMessageType(env, message->getType());
\r
508 LOGE("Failed to get Type value for Message");
\r
511 jfieldID fid_type = env->GetFieldID(cls_message, "mType",
\r
512 "Lorg/iotivity/service/ns/common/Message$MessageType;");
\r
515 LOGE("Failed to get field Type for Message");
\r
518 env->SetObjectField(obj_message, fid_type, jType);
\r
519 env->DeleteLocalRef(cls_message);
\r
520 LOGD ("ConsumerService_getJavaMessage - OUT");
\r
521 return obj_message;
\r
524 void onDiscoverProvider(OIC::Service::NSProvider *provider)
\r
526 LOGD ("ConsumerService_onDiscoverProvider - IN");
\r
529 JNIEnv *env = GetJNIEnv(&envRet);
\r
530 if (NULL == env) return ;
\r
532 jobject jDiscoverListener = (jobject) env->NewLocalRef(g_obj_discoverListener);
\r
533 if (!jDiscoverListener)
\r
535 LOGE ("Failed to Get jDiscoverListener");
\r
536 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
540 jobject obj_provider = getJavaProvider(env, provider);
\r
543 LOGE ("Failed to Get Provider Object");
\r
544 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
548 jclass cls = env->GetObjectClass(jDiscoverListener);
\r
551 LOGE ("Failed to Get ObjectClass for jDiscoverListener");
\r
552 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
555 jmethodID mid = env->GetMethodID(
\r
557 "onProviderDiscovered",
\r
558 "(Lorg/iotivity/service/ns/consumer/Provider;)V");
\r
561 LOGE ("Failed to Get MethodID for onProviderDiscovered");
\r
562 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
566 env->CallVoidMethod(jDiscoverListener, mid, obj_provider);
\r
568 env->DeleteLocalRef(jDiscoverListener);
\r
569 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
570 LOGD ("ConsumerService_onDiscoverProvider - OUT");
\r
574 void onProviderChanged(OIC::Service::NSProvider *provider, OIC::Service::NSResponse response)
\r
576 LOGD ("ConsumerService_onSubscriptionAccepted -IN");
\r
579 JNIEnv *env = GetJNIEnv(&envRet);
\r
580 if (NULL == env) return ;
\r
582 jobject jAcceptListener = (jobject) env->NewLocalRef(g_obj_acceptListener);
\r
583 if (!jAcceptListener)
\r
585 LOGE ("Failed to Get jAcceptListener");
\r
586 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
589 jobject obj_provider = getJavaProvider(env, provider);
\r
592 LOGE ("Failed to Get Provider Object");
\r
593 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
597 jclass cls = env->GetObjectClass(jAcceptListener);
\r
600 LOGE ("Failed to Get ObjectClass for jAcceptListener");
\r
601 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
604 jmethodID mid = env->GetMethodID(
\r
606 "onProviderChanged",
\r
607 "(Lorg/iotivity/service/ns/consumer/Provider;Lorg/iotivity/service/ns/consumer/ConsumerService$Response;)V");
\r
610 LOGE ("Failed to Get MethodID for onProviderChanged");
\r
611 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
614 jobject obj_response = getJavaResponse(env, response);
\r
615 env->CallVoidMethod(jAcceptListener, mid, obj_provider, obj_response);
\r
617 env->DeleteLocalRef(jAcceptListener);
\r
618 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
619 LOGD ("ConsumerService_onSubscriptionAccepted -OUT");
\r
624 void onMessagePosted(OIC::Service::NSMessage *message)
\r
626 LOGD ("ConsumerService_onMessagePosted -IN");
\r
629 JNIEnv *env = GetJNIEnv(&envRet);
\r
630 if (NULL == env) return ;
\r
632 jobject jPostListener = (jobject) env->NewLocalRef(g_obj_postListener);
\r
633 if (!jPostListener)
\r
635 LOGE ("Failed to Get jPostListener");
\r
636 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
640 jobject obj_message = getJavaMessage( env, message);
\r
643 LOGE ("Failed to Get Message Object");
\r
644 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
647 jclass cls = env->GetObjectClass(jPostListener);
\r
650 LOGE ("Failed to Get ObjectClass for jPostListener");
\r
651 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
654 jmethodID mid = env->GetMethodID(
\r
656 "onMessageReceived",
\r
657 "(Lorg/iotivity/service/ns/common/Message;)V");
\r
660 LOGE ("Failed to Get MethodID for onMessageReceived");
\r
661 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
665 env->CallVoidMethod(jPostListener, mid, obj_message);
\r
667 env->DeleteLocalRef(jPostListener);
\r
668 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
669 LOGD ("ConsumerService_onMessagePosted -OUT");
\r
673 void onSyncInfoReceived(OIC::Service::NSSyncInfo *sync)
\r
675 LOGD ("ConsumerService_onSyncInfoReceived - IN");
\r
678 JNIEnv *env = GetJNIEnv(&envRet);
\r
679 if (NULL == env) return ;
\r
681 jobject jSyncListener = (jobject) env->NewLocalRef(g_obj_syncListener);
\r
682 if (!jSyncListener)
\r
684 LOGE ("Failed to Get jSyncListener");
\r
685 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
689 LOGD ("Sync ID : %llu\n", sync->getMessageId());
\r
690 LOGD ("Sync ProviderId : %s\n", sync->getProviderId().c_str());
\r
691 LOGD ("Sync STATE : %d\n", (int) sync->getState());
\r
693 jlong jMessageId = (jlong) sync->getMessageId();
\r
694 jstring jProviderId = env->NewStringUTF(sync->getProviderId().c_str());
\r
695 jint jState = (jint) sync->getState();
\r
697 jclass cls_sync = (jclass) (env->NewLocalRef(g_cls_SyncInfo));
\r
700 LOGE ("Failed to Get ObjectClass for SyncInfo");
\r
701 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
704 jmethodID mid_sync = env->GetMethodID(
\r
705 cls_sync, "<init>", "(JLjava/lang/String;I)V");
\r
708 LOGE ("Failed to Get MethodID for SyncInfo<init>");
\r
709 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
712 jobject obj_sync = env->NewObject(cls_sync, mid_sync,
\r
713 jMessageId, jProviderId, jState);
\r
715 jclass cls = env->GetObjectClass(jSyncListener);
\r
718 LOGE ("Failed to Get ObjectClass for jSyncListener");
\r
719 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
722 jmethodID mid = env->GetMethodID(
\r
724 "onSyncInfoReceived",
\r
725 "(Lorg/iotivity/service/ns/common/SyncInfo;)V");
\r
728 LOGE ("Failed to Get MethodID for onSyncInfoReceived");
\r
729 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
733 env->CallVoidMethod(jSyncListener, mid, obj_sync);
\r
735 env->DeleteLocalRef(jSyncListener);
\r
736 env->DeleteLocalRef(cls_sync);
\r
737 if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
\r
738 LOGD ("ConsumerService_onSyncInfoReceived - OUT");
\r
742 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStart
\r
743 (JNIEnv *env, jobject jObj, jobject jDiscoverListener, jobject jAccpetListener)
\r
745 LOGD ("ConsumerService_StartConsumer - IN");
\r
746 if (!jDiscoverListener || !jAccpetListener)
\r
748 ThrowNSException(NS_ERROR, "Listener cannot be null");
\r
752 if (g_obj_discoverListener != NULL)
\r
754 env->DeleteGlobalRef(g_obj_discoverListener);
\r
756 if (g_obj_acceptListener != NULL)
\r
758 env->DeleteGlobalRef(g_obj_acceptListener);
\r
761 g_obj_discoverListener = (jobject) env->NewGlobalRef(jDiscoverListener);
\r
762 g_obj_acceptListener = (jobject) env->NewGlobalRef(jAccpetListener);
\r
764 OIC::Service::NSConsumerService::ConsumerConfig cfg;
\r
765 cfg.m_discoverCb = onDiscoverProvider;
\r
766 cfg.m_changedCb = onProviderChanged;
\r
768 OIC::Service::NSConsumerService::getInstance()->Start(cfg);
\r
769 LOGD ("ConsumerService_StartConsumer - OUT");
\r
774 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStop
\r
775 (JNIEnv *env, jobject jObj)
\r
777 LOGD ("ConsumerService_StopConsumer - IN");
\r
779 env->DeleteGlobalRef(g_obj_postListener);
\r
780 env->DeleteGlobalRef(g_obj_discoverListener);
\r
781 env->DeleteGlobalRef(g_obj_syncListener);
\r
782 env->DeleteGlobalRef(g_obj_acceptListener);
\r
783 g_obj_postListener = NULL;
\r
784 g_obj_discoverListener = NULL;
\r
785 g_obj_syncListener = NULL;
\r
786 g_obj_acceptListener = NULL;
\r
787 OIC::Service::NSConsumerService::getInstance()->Stop();
\r
788 LOGD ("ConsumerService_StopConsumer - OUT");
\r
792 JNIEXPORT jint JNICALL
\r
793 Java_org_iotivity_service_ns_consumer_ConsumerService_nativeEnableRemoteService
\r
794 (JNIEnv *env, jobject jObj, jstring jServerAddress)
\r
796 LOGD ("ConsumerService_EnableRemoteService - IN");
\r
797 if (!jServerAddress)
\r
799 ThrowNSException(NS_ERROR, "EnableRemoteService server address NULL");
\r
800 return (jint) OIC::Service::NSResult::ERROR;
\r
802 const char *serverAddress = env->GetStringUTFChars(jServerAddress, 0);
\r
803 OIC::Service::NSResult res =
\r
804 OIC::Service::NSConsumerService::getInstance()->EnableRemoteService(std::string(serverAddress));
\r
805 env->ReleaseStringUTFChars(jServerAddress, serverAddress);
\r
806 LOGD ("ConsumerService_EnableRemoteService - OUT");
\r
810 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeRescanProvider
\r
811 (JNIEnv *env, jobject jObj)
\r
813 LOGD ("ConsumerService_RescanProvider - IN");
\r
814 OIC::Service::NSConsumerService::getInstance()->RescanProvider();
\r
815 LOGD ("ConsumerService_RescanProvider - OUT");
\r
820 JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeGetProvider
\r
821 (JNIEnv *env, jobject jObj, jstring jProviderId)
\r
823 LOGD ("ConsumerService_GetProvider - IN");
\r
826 ThrowNSException(NS_ERROR, "ProviderId cannot be null");
\r
830 const char *providerId = env->GetStringUTFChars(jProviderId, 0);
\r
832 OIC::Service::NSProvider *provider =
\r
833 OIC::Service::NSConsumerService::getInstance()->getProvider(std::string(providerId));
\r
834 if (provider == nullptr)
\r
836 ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");
\r
840 LOGD ("ProviderId : %s\n", provider->getProviderId().c_str());
\r
842 jProviderId = env->NewStringUTF(provider->getProviderId().c_str());
\r
843 jlong pProvider = (long)provider;
\r
845 jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));
\r
848 LOGE ("Failed to Get ObjectClass for Provider");
\r
851 jmethodID mid_provider = env->GetMethodID(
\r
852 cls_provider, "<init>", "(Ljava/lang/String;)V");
\r
855 LOGE ("Failed to Get MethodID for Provider<init>");
\r
858 jobject obj_provider = env->NewObject(cls_provider, mid_provider,
\r
861 jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");
\r
864 ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");
\r
867 env->SetLongField(obj_provider, nativeHandle, pProvider);
\r
869 env->DeleteLocalRef(cls_provider);
\r
870 env->ReleaseStringUTFChars(jProviderId, providerId);
\r
871 LOGD ("ConsumerService_GetProvider - OUT");
\r
872 return obj_provider;
\r
875 JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeGetMessage
\r
876 (JNIEnv *env, jobject jObj, jlong jMsgId)
\r
878 LOGI("JNIConsumerService: nativeGetMessage - IN");
\r
880 OIC::Service::NSMessage *msg =
\r
881 OIC::Service::NSConsumerService::getInstance()->getMessage((uint64_t)jMsgId);
\r
882 if (msg == nullptr)
\r
884 ThrowNSException(NS_ERROR, "Message doesn't exist");
\r
888 jobject obj_msg = getJavaMessage(env, msg);
\r
890 LOGI("JNIConsumerService: nativeGetMessage - OUT");
\r
893 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSubscribe
\r
894 (JNIEnv *env, jobject jObj)
\r
896 LOGD ("Provider_Subscribe -IN");
\r
897 jclass providerClass = env->GetObjectClass(jObj);
\r
898 if (!providerClass)
\r
900 ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");
\r
904 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
907 ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");
\r
910 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
913 LOGD ("calling subscribe on mNativeHandle");
\r
914 OIC::Service::NSProvider *provider = (OIC::Service::NSProvider *) (jProvider);
\r
915 provider->subscribe();
\r
919 OIC::Service::NSProvider *provider = getNativeProvider(env, jObj);
\r
920 if (provider == nullptr)
\r
922 ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");
\r
925 LOGD ("calling subscribe on ProviderID");
\r
926 provider->subscribe();
\r
928 LOGD ("Provider_Subscribe -OUT");
\r
932 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeUnsubscribe
\r
933 (JNIEnv *env, jobject jObj)
\r
935 LOGD ("Provider_Unsubscribe - IN");
\r
937 jclass providerClass = env->GetObjectClass(jObj);
\r
938 if (!providerClass)
\r
940 ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");
\r
944 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
947 ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");
\r
950 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
953 LOGD ("calling unSubscribe on mNativeHandle");
\r
954 OIC::Service::NSProvider *provider = (OIC::Service::NSProvider *) (jProvider);
\r
955 provider->unSubscribe();
\r
959 OIC::Service::NSProvider *provider = getNativeProvider(env, jObj);
\r
960 if (provider == nullptr)
\r
962 ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");
\r
965 LOGD ("calling unSubscribe on ProviderID");
\r
966 provider->unSubscribe();
\r
968 LOGD ("Provider_Unsubscribe - IN");
\r
972 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSendSyncInfo
\r
973 (JNIEnv *env, jobject jObj, jlong jMessageId, jint jSyncType)
\r
975 LOGD ("Provider_SendSyncInfo - IN");
\r
978 ThrowNSException(NS_ERROR, "MessageId cannot be 0");
\r
982 jclass providerClass = env->GetObjectClass(jObj);
\r
983 if (!providerClass)
\r
985 ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");
\r
989 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
992 ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");
\r
995 uint64_t messageId = (uint64_t) jMessageId;
\r
997 LOGD("!!!!!!jMessageId: %lld", jMessageId);
\r
998 LOGD("!!!!!!messageId: %lld", messageId);
\r
1000 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1003 LOGD ("calling SendSyncInfo on mNativeHandle");
\r
1004 OIC::Service::NSProvider *provider = (OIC::Service::NSProvider *) (jProvider);
\r
1005 provider->SendSyncInfo(messageId, (OIC::Service::NSSyncInfo::NSSyncType)jSyncType);
\r
1009 OIC::Service::NSProvider *provider = getNativeProvider(env, jObj);
\r
1010 if (provider == nullptr)
\r
1012 ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");
\r
1015 LOGD ("calling SendSyncInfo on ProviderID");
\r
1016 provider->SendSyncInfo(messageId, (OIC::Service::NSSyncInfo::NSSyncType)jSyncType);
\r
1018 LOGD ("Provider_SendSyncInfo - OUT");
\r
1023 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSetListener
\r
1024 (JNIEnv *env, jobject jObj, jobject jPostListener, jobject jSyncListener)
\r
1026 LOGD ("Provider_SetListener - IN");
\r
1027 if (!jPostListener || !jSyncListener)
\r
1029 ThrowNSException(NS_ERROR, "Listener cannot be null");
\r
1033 jclass providerClass = env->GetObjectClass(jObj);
\r
1034 if (!providerClass)
\r
1036 ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");
\r
1040 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1041 if (!nativeHandle)
\r
1043 ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");
\r
1046 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1049 LOGD ("calling SetListener on mNativeHandle");
\r
1050 if (g_obj_postListener != NULL)
\r
1052 env->DeleteGlobalRef(g_obj_postListener);
\r
1054 if (g_obj_syncListener != NULL)
\r
1056 env->DeleteGlobalRef(g_obj_syncListener);
\r
1058 g_obj_syncListener = NULL;
\r
1059 g_obj_acceptListener = NULL;
\r
1060 g_obj_postListener = (jobject) env->NewGlobalRef(jPostListener);
\r
1061 g_obj_syncListener = (jobject) env->NewGlobalRef(jSyncListener);
\r
1063 OIC::Service::NSProvider *provider = (OIC::Service::NSProvider *) (jProvider);
\r
1064 provider->setListener(onMessagePosted, onSyncInfoReceived);
\r
1068 OIC::Service::NSProvider *provider = getNativeProvider(env, jObj);
\r
1069 if (provider == nullptr)
\r
1071 ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");
\r
1074 LOGD ("calling SetListener on ProviderID");
\r
1075 if (g_obj_postListener != NULL)
\r
1077 env->DeleteGlobalRef(g_obj_postListener);
\r
1079 if (g_obj_syncListener != NULL)
\r
1081 env->DeleteGlobalRef(g_obj_syncListener);
\r
1083 g_obj_syncListener = NULL;
\r
1084 g_obj_acceptListener = NULL;
\r
1085 g_obj_postListener = (jobject) env->NewGlobalRef(jPostListener);
\r
1086 g_obj_syncListener = (jobject) env->NewGlobalRef(jSyncListener);
\r
1088 provider->setListener(onMessagePosted, onSyncInfoReceived);
\r
1090 LOGD ("Provider_SetListener - OUT");
\r
1094 JNIEXPORT jint JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSelectInterestTopics
\r
1095 (JNIEnv *env, jobject jObj, jobject jTopicsList)
\r
1097 LOGD("Provider_SelectInterestTopics -IN");
\r
1100 LOGI("Fail to select Interest Topics - Topic List is null");
\r
1101 ThrowNSException(NS_ERROR, "TopicList cannot be null");
\r
1102 return (jint) OIC::Service::NSResult::ERROR;
\r
1104 OIC::Service::NSTopicsList *nsTopicsList = getNativeTopicsList(env, jTopicsList);
\r
1105 if (nsTopicsList == nullptr)
\r
1107 ThrowNSException(NS_ERROR, "NSTopicList cannot be created ");
\r
1108 return (jint) OIC::Service::NSResult::ERROR;
\r
1111 jclass providerClass = env->GetObjectClass(jObj);
\r
1112 if (!providerClass)
\r
1114 ThrowNSException(NS_ERROR, "Failed to Get ObjectClass for Provider");
\r
1115 return (jint) OIC::Service::NSResult::ERROR;
\r
1118 jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");
\r
1119 if (!nativeHandle)
\r
1121 ThrowNSException(NS_ERROR, "Failed to get nativeHandle for Provider");
\r
1122 return (jint) OIC::Service::NSResult::ERROR;
\r
1124 jlong jProvider = env->GetLongField(jObj, nativeHandle);
\r
1125 OIC::Service::NSResult result;
\r
1128 LOGD ("calling subscribe on mNativeHandle");
\r
1129 OIC::Service::NSProvider *provider = (OIC::Service::NSProvider *) (jProvider);
\r
1130 result = provider->selectInterestTopics(nsTopicsList);
\r
1134 OIC::Service::NSProvider *provider = getNativeProvider(env, jObj);
\r
1135 if (provider == nullptr)
\r
1137 ThrowNSException(NS_ERROR, "Provider with Given Id doesn't exist");
\r
1138 return (jint) OIC::Service::NSResult::ERROR;
\r
1140 LOGD ("calling subscribe on ProviderID");
\r
1141 result = provider->selectInterestTopics(nsTopicsList);
\r
1143 if (result != OIC::Service::NSResult::OK)
\r
1145 LOGI("Fail to select Interest Topics");
\r
1147 LOGD("Provider_SelectInterestTopics -OUT");
\r
1148 return (jint) result;
\r
1151 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
\r
1153 LOGD("ConsumerService_JNI_OnLoad");
\r
1157 if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
\r
1159 LOGE("Failed to get the environment using GetEnv()");
\r
1163 jclass localMessage = env->FindClass(
\r
1164 "org/iotivity/service/ns/common/Message");
\r
1165 if (!localMessage)
\r
1167 LOGE("Failed to get local Message class");
\r
1170 g_cls_Message = (jclass) (env->NewGlobalRef(localMessage));
\r
1171 if (!g_cls_Message)
\r
1173 LOGE("Failed to set Global Message reference");
\r
1177 jclass localProvider = env->FindClass(
\r
1178 "org/iotivity/service/ns/consumer/Provider");
\r
1179 if (!localProvider)
\r
1181 LOGE("Failed to get local Provider class");
\r
1184 g_cls_Provider = (jclass) (env->NewGlobalRef(localProvider));
\r
1185 if (!g_cls_Provider)
\r
1187 LOGE("Failed to set Global Provider reference");
\r
1191 jclass localSyncInfo = env->FindClass(
\r
1192 "org/iotivity/service/ns/common/SyncInfo");
\r
1193 if (!localSyncInfo)
\r
1195 LOGE("Failed to get local SyncInfo class");
\r
1198 g_cls_SyncInfo = (jclass) (env->NewGlobalRef(localSyncInfo));
\r
1199 if (!g_cls_SyncInfo)
\r
1201 LOGE("Failed to set Global NSSyncInfo reference");
\r
1205 jclass localMediaContents = env->FindClass(
\r
1206 "org/iotivity/service/ns/common/MediaContents");
\r
1207 if (!localMediaContents)
\r
1209 LOGE("Failed to get local MediaContents class");
\r
1212 g_cls_MediaContents = (jclass) (env->NewGlobalRef(localMediaContents));
\r
1213 if (!g_cls_MediaContents)
\r
1215 LOGE("Failed to set Global MediaContents reference");
\r
1218 jclass localTopicState = env->FindClass(
\r
1219 "org/iotivity/service/ns/common/Topic$TopicState");
\r
1220 if (!localTopicState)
\r
1222 LOGE("Failed to get local TopicState enum");
\r
1225 g_cls_TopicState = (jclass) (env->NewGlobalRef(localTopicState));
\r
1226 if (!g_cls_TopicState)
\r
1228 LOGE("Failed to set Global TopicState reference");
\r
1232 jclass localTopic = env->FindClass(
\r
1233 "org/iotivity/service/ns/common/Topic");
\r
1236 LOGE("Failed to get local TopicState enum");
\r
1239 g_cls_Topic = (jclass) (env->NewGlobalRef(localTopic));
\r
1242 LOGE("Failed to set Global Topic reference");
\r
1246 jclass localMessageType = env->FindClass(
\r
1247 "org/iotivity/service/ns/common/Message$MessageType");
\r
1248 if (!localMessageType)
\r
1250 LOGE("Failed to get local Message Type class");
\r
1253 g_cls_Message_Type = (jclass) (env->NewGlobalRef(localMessageType));
\r
1254 if (!g_cls_Message_Type)
\r
1256 LOGE("Failed to set Global Message Type reference");
\r
1260 jclass localResponse = env->FindClass(
\r
1261 "org/iotivity/service/ns/consumer/ConsumerService$Response");
\r
1262 if (!localResponse)
\r
1264 LOGE("Failed to get localResponse Type class");
\r
1267 g_cls_Response = (jclass) (env->NewGlobalRef(localResponse));
\r
1268 if (!g_cls_Response)
\r
1270 LOGE("Failed to set Global Response Type reference");
\r
1274 jclass localTopicsList = env->FindClass(
\r
1275 "org/iotivity/service/ns/common/TopicsList");
\r
1276 if (!localTopicsList)
\r
1278 LOGE("Failed to get local Topic class");
\r
1281 g_cls_TopicsList = (jclass) (env->NewGlobalRef(localTopicsList));
\r
1282 if (!g_cls_TopicsList)
\r
1284 LOGE("Failed to set Global TopicsList reference");
\r
1287 env->DeleteLocalRef(localMessage);
\r
1288 env->DeleteLocalRef(localProvider);
\r
1289 env->DeleteLocalRef(localSyncInfo);
\r
1290 env->DeleteLocalRef(localMediaContents);
\r
1291 env->DeleteLocalRef(localTopicState);
\r
1292 env->DeleteLocalRef(localMessageType);
\r
1293 env->DeleteLocalRef(localResponse);
\r
1294 env->DeleteLocalRef(localTopic);
\r
1295 env->DeleteLocalRef(localTopicsList);
\r
1297 return NSExceptionInit(env);
\r
1300 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved)
\r
1302 LOGI("ConsumerService_JNI_OnUnload");
\r
1305 if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
\r
1307 LOGE("Failed to get the environment using GetEnv()");
\r
1311 env->DeleteGlobalRef(g_cls_Message);
\r
1312 env->DeleteGlobalRef(g_cls_Provider);
\r
1313 env->DeleteGlobalRef(g_cls_SyncInfo);
\r
1314 env->DeleteGlobalRef(g_cls_MediaContents);
\r
1315 env->DeleteGlobalRef(g_cls_TopicState);
\r
1316 env->DeleteGlobalRef(g_cls_Message_Type);
\r
1317 env->DeleteGlobalRef(g_cls_Response);
\r
1318 env->DeleteGlobalRef(g_cls_Topic);
\r
1319 env->DeleteGlobalRef(g_cls_TopicsList);
\r