Adding fix for Sonarqube major issues for IoTivity 1.2-rel
[platform/upstream/iotivity.git] / service / notification / android / notification-service / src / main / jni / consumer / JniNotificationConsumer.cpp
1 //******************************************************************\r
2 //\r
3 // Copyright 2016 Samsung Electronics All Rights Reserved.\r
4 //\r
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
6 //\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
10 //\r
11 //      http://www.apache.org/licenses/LICENSE-2.0\r
12 //\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
18 //\r
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
20 \r
21 #include "JniNotificationConsumer.h"\r
22 #include "NSConsumerService.h"\r
23 #include "NSException.h"\r
24 #include "JniOcRepresentation.h"\r
25 \r
26 static JavaVM *g_jvm_consumer = NULL;\r
27 \r
28 static jobject g_obj_postListener = NULL;\r
29 static jobject g_obj_syncListener = NULL;\r
30 static jobject g_obj_discoverListener = NULL;\r
31 static jobject g_obj_acceptListener = NULL;\r
32 \r
33 jclass g_cls_Message;\r
34 jclass g_cls_Provider;\r
35 jclass g_cls_SyncInfo;\r
36 jclass g_cls_SyncType;\r
37 jclass g_cls_MediaContents;\r
38 jclass g_cls_TopicState;\r
39 jclass g_cls_Message_Type;\r
40 jclass g_cls_ProviderState;\r
41 jclass g_cls_Topic;\r
42 jclass g_cls_TopicsList;\r
43 jclass g_cls_OcRepresentation;\r
44 jmethodID g_mid_OcRepresentation_N_ctor_bool = NULL;\r
45 \r
46 static JNIEnv *GetJNIEnv(jint *ret)\r
47 {\r
48     JNIEnv *env = NULL;\r
49 \r
50     *ret = g_jvm_consumer->GetEnv((void **) &env, JNI_CURRENT_VERSION);\r
51     switch (*ret)\r
52     {\r
53         case JNI_OK:\r
54             return env;\r
55         case JNI_EDETACHED:\r
56             if (g_jvm_consumer->AttachCurrentThread(&env, NULL) != JNI_OK)\r
57             {\r
58                 NS_LOGE ("Failed to get the environment");\r
59                 return NULL;\r
60             }\r
61             else\r
62             {\r
63                 return env;\r
64             }\r
65         case JNI_EVERSION:\r
66             NS_LOGE ("JNI version is not supported");\r
67             return NULL;\r
68         default:\r
69             NS_LOGE ("Failed to get the environment");\r
70             return NULL;\r
71     }\r
72 }\r
73 \r
74 jobject getJavaProviderState(JNIEnv *env, OIC::Service::NSProviderState state)\r
75 {\r
76     NS_LOGD ("ConsumerService_getJavaProviderState - IN");\r
77     jobject providerState = NULL;\r
78     switch (state)\r
79     {\r
80         case OIC::Service::NSProviderState::ALLOW:\r
81             {\r
82                 static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,\r
83                                           "ALLOW", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");\r
84                 providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);\r
85                 break;\r
86             }\r
87         case OIC::Service::NSProviderState::DENY:\r
88             {\r
89                 static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,\r
90                                           "DENY", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");\r
91                 providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);\r
92                 break;\r
93             }\r
94         case OIC::Service::NSProviderState::TOPIC:\r
95             {\r
96                 static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,\r
97                                           "TOPIC", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");\r
98                 providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);\r
99                 break;\r
100             }\r
101         case OIC::Service::NSProviderState::STOPPED:\r
102             {\r
103                 static jfieldID fieldID = env->GetStaticFieldID(g_cls_ProviderState,\r
104                                           "STOPPED", "Lorg/iotivity/service/ns/consumer/Provider$ProviderState;");\r
105                 providerState = env->GetStaticObjectField(g_cls_ProviderState, fieldID);\r
106                 break;\r
107             }\r
108         default:\r
109             {\r
110                 providerState = NULL;\r
111                 break;\r
112             }\r
113     }\r
114     NS_LOGD ("ConsumerService_getJavaProviderState - OUT");\r
115     return providerState;\r
116 }\r
117 \r
118 jobject getJavaSyncType(JNIEnv *env, OIC::Service::NSSyncInfo::NSSyncType nsType)\r
119 {\r
120     NS_LOGD ("ConsumerService_getJavaSyncType - IN");\r
121 \r
122     // SyncType\r
123     jclass cls_SyncType = (jclass) (env->NewLocalRef(g_cls_SyncType));\r
124     if (!cls_SyncType)\r
125     {\r
126         NS_LOGE ("Failed to Get ObjectClass for SyncType");\r
127         return NULL;\r
128     }\r
129     jobject syncType = NULL;\r
130     switch (nsType)\r
131     {\r
132         case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_UNREAD:\r
133             {\r
134                 static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,\r
135                                           "UNREAD", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");\r
136                 syncType = env->GetStaticObjectField(cls_SyncType, fieldID);\r
137                 break;\r
138             }\r
139         case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ :\r
140             {\r
141                 static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,\r
142                                           "READ", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");\r
143                 syncType = env->GetStaticObjectField(cls_SyncType, fieldID);\r
144                 break;\r
145             }\r
146         case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_DELETED :\r
147             {\r
148                 static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType,\r
149                                           "DELETED", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;");\r
150                 syncType = env->GetStaticObjectField(cls_SyncType, fieldID);\r
151                 break;\r
152             }\r
153         default:\r
154             {\r
155                 syncType = NULL;\r
156                 break;\r
157             }\r
158     }\r
159 \r
160     NS_LOGD ("ConsumerService_getJavaSyncType - OUT");\r
161     return syncType;\r
162 }\r
163 \r
164 jobject getJavaTopicState(JNIEnv *env, OIC::Service::NSTopic::NSTopicState nsState)\r
165 {\r
166     NS_LOGD ("ConsumerService_getJavaTopicState - IN");\r
167 \r
168     // TopicState\r
169     jclass cls_topicState = (jclass) (env->NewLocalRef(g_cls_TopicState));\r
170     if (!cls_topicState)\r
171     {\r
172         NS_LOGE ("Failed to Get ObjectClass for TopicState Type");\r
173         return NULL;\r
174     }\r
175     jobject topicState = NULL;\r
176 \r
177     switch (nsState)\r
178     {\r
179         case OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED:\r
180             {\r
181                 static jfieldID fieldID = env->GetStaticFieldID(cls_topicState,\r
182                                           "UNSUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;");\r
183                 topicState = env->GetStaticObjectField(cls_topicState, fieldID);\r
184                 break;\r
185             }\r
186         case OIC::Service::NSTopic::NSTopicState::SUBSCRIBED:\r
187             {\r
188                 static jfieldID fieldID = env->GetStaticFieldID(cls_topicState,\r
189                                           "SUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;");\r
190                 topicState = env->GetStaticObjectField(cls_topicState, fieldID);\r
191                 break;\r
192             }\r
193         default:\r
194             {\r
195                 topicState = NULL;\r
196                 break;\r
197             }\r
198     }\r
199 \r
200     NS_LOGD ("ConsumerService_getJavaTopicState - OUT");\r
201     return topicState;\r
202 }\r
203 \r
204 jobject getJavaTopicsList(JNIEnv *env, std::shared_ptr<OIC::Service::NSTopicsList> topicList)\r
205 {\r
206     NS_LOGD ("ConsumerService_getJavaTopicsList - IN");\r
207     jclass cls_topicList = (jclass) (env->NewLocalRef(g_cls_TopicsList));\r
208     if (!cls_topicList)\r
209     {\r
210         NS_LOGE ("Failed to Get ObjectClass for TopicsList");\r
211         return NULL;\r
212     }\r
213     jmethodID mid_topicList = env->GetMethodID(cls_topicList, "<init>", "()V");\r
214     if (!mid_topicList)\r
215     {\r
216         NS_LOGE ("Failed to Get MethodID for TopicsList<init>");\r
217         return NULL;\r
218     }\r
219     jobject obj_topicList = env->NewObject(cls_topicList, mid_topicList);\r
220     if (!obj_topicList)\r
221     {\r
222         NS_LOGE ("Failed to Get object for TopicsList");\r
223         return NULL;\r
224     }\r
225     jmethodID mid_addTopic = env->GetMethodID(cls_topicList, "addTopic",\r
226                              "(Ljava/lang/String;Lorg/iotivity/service/ns/common/Topic$TopicState;)V");\r
227     if (!mid_addTopic)\r
228     {\r
229         NS_LOGE ("Failed to Get MethodID for addTopic");\r
230         return NULL;\r
231     }\r
232     for (auto it : topicList->getTopicsList())\r
233     {\r
234         jobject jState = getJavaTopicState(env, it.getState());\r
235         std::string topicName = it.getTopicName();\r
236         jstring jTopicName = env->NewStringUTF(topicName.c_str());\r
237         env->CallVoidMethod(obj_topicList, mid_addTopic, jTopicName, jState);\r
238     }\r
239     env->DeleteLocalRef(cls_topicList);\r
240     NS_LOGD ("ConsumerService_getJavaTopicsList - OUT");\r
241     return obj_topicList;\r
242 }\r
243 \r
244 bool getNativeTopicState(JNIEnv *env,  jobject jTopic , OIC::Service::NSTopic::NSTopicState &state )\r
245 {\r
246     NS_LOGD ("ConsumerService_getNativeTopicState - IN");\r
247 \r
248     jclass cls_topic = env->GetObjectClass( jTopic);\r
249     // TopicState\r
250     jclass cls_TopicState = (jclass) (env->NewLocalRef(g_cls_TopicState));\r
251     if (!cls_TopicState)\r
252     {\r
253         NS_LOGE ("Failed to Get ObjectClass for cls_TopicState Type");\r
254         return false;\r
255     }\r
256     jmethodID mid = env->GetMethodID(cls_TopicState, "ordinal", "()I");\r
257     jfieldID fid_state = env->GetFieldID( cls_topic, "mState",\r
258                                           "Lorg/iotivity/service/ns/common/Topic$TopicState;");\r
259     if (fid_state == NULL)\r
260     {\r
261         NS_LOGE ("Error: jfieldID for state type  is null");\r
262         return false;\r
263     }\r
264     jobject jobj = env->GetObjectField( jTopic, fid_state);\r
265     if (jobj == NULL)\r
266     {\r
267         NS_LOGE ("Error: object of field  state Type is null");\r
268         return false;\r
269     }\r
270     jint jState = env->CallIntMethod(jobj, mid);\r
271     state = (OIC::Service::NSTopic::NSTopicState) jState;\r
272     NS_LOGD ("ConsumerService_getNativeTopicState - OUT");\r
273     return true;\r
274 \r
275 }\r
276 \r
277 const char *getNativeTopicName(JNIEnv *env,  jobject jTopic)\r
278 {\r
279     NS_LOGD ("ConsumerService_getNativeTopicName - IN");\r
280     jclass cls_topic = env->GetObjectClass( jTopic);\r
281     if (cls_topic == NULL)\r
282     {\r
283         NS_LOGE ("Error: Class for Topic is null");\r
284         return nullptr;\r
285     }\r
286     jfieldID fid_name = env->GetFieldID( cls_topic, "mTopicName", "Ljava/lang/String;");\r
287     if (fid_name == NULL)\r
288     {\r
289         NS_LOGE ("Error: jfieldID for Topic Name  is null");\r
290         return nullptr;\r
291     }\r
292     jstring jTopicName = (jstring) env->GetObjectField( jTopic, fid_name);\r
293     const char *topicName = NULL;\r
294     if (jTopicName)\r
295     {\r
296         topicName = env->GetStringUTFChars( jTopicName, NULL);\r
297     }\r
298     else\r
299     {\r
300         NS_LOGI (TAG, "Info: topicName is null");\r
301     }\r
302     NS_LOGD ("ConsumerService_getNativeTopicName - OUT");\r
303     return topicName;\r
304 \r
305 }\r
306 \r
307 std::shared_ptr<OIC::Service::NSTopicsList> getNativeTopicsList(JNIEnv *env, jobject jTopicList)\r
308 {\r
309     NS_LOGD ("ConsumerService_getNativeTopicsList - IN");\r
310 \r
311     jclass cls_topicList = env->GetObjectClass( jTopicList);\r
312     if (cls_topicList == NULL)\r
313     {\r
314         NS_LOGE ("Error: Class for Topic List  is null");\r
315         return nullptr;\r
316     }\r
317     jfieldID fid_list = env->GetFieldID( cls_topicList, "mTopicsList", "Ljava/util/Vector;");\r
318     if (fid_list == NULL)\r
319     {\r
320         NS_LOGE ("Error: jfieldID for Topic List  is null");\r
321         return nullptr;\r
322     }\r
323     jobject jobj = env->GetObjectField( jTopicList, fid_list);\r
324     if (jobj == NULL)\r
325     {\r
326         NS_LOGE ("Error: object of field  Topic List is null");\r
327         return nullptr;\r
328     }\r
329     jclass cls_vec = env->FindClass("java/util/Vector");\r
330     if (cls_vec == NULL)\r
331     {\r
332         NS_LOGE ("Error: Class for Vector not found");\r
333         return nullptr;\r
334     }\r
335     jmethodID sizeMethod = env->GetMethodID(cls_vec,  "size", "()I");\r
336     if (sizeMethod == NULL)\r
337     {\r
338         NS_LOGE ("Error: MethodId for Vector Size  not found");\r
339         return nullptr;\r
340     }\r
341     int size = env->CallIntMethod(jobj, sizeMethod);\r
342     jmethodID getMethod = env->GetMethodID(cls_vec,  "get", "(I)Ljava/lang/Object;");\r
343     if (getMethod == NULL)\r
344     {\r
345         NS_LOGE ("Error: MethodId for Vector get  not found");\r
346         return nullptr;\r
347     }\r
348     std::shared_ptr<OIC::Service::NSTopicsList> nsTopicList =\r
349         std::make_shared<OIC::Service::NSTopicsList>();\r
350     for (int index = 0; index < size; index++)\r
351     {\r
352         jobject topicObj = env->CallObjectMethod(jobj, getMethod, index);\r
353         if (topicObj == NULL)\r
354         {\r
355             NS_LOGE ("Error: object of field  Topic  is null");\r
356             return nullptr;\r
357         }\r
358         const char *name =  getNativeTopicName(env, topicObj);\r
359         if (name == nullptr)\r
360         {\r
361             NS_LOGE ("Error: Couldn't find topic Name");\r
362             return nullptr;\r
363         }\r
364         std::string topicName(name);\r
365         OIC::Service::NSTopic::NSTopicState state = OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED;\r
366         if (!getNativeTopicState(env, topicObj, state))\r
367         {\r
368             return nullptr;\r
369         }\r
370         nsTopicList->addTopic(topicName, state);\r
371     }\r
372 \r
373     env->DeleteLocalRef(cls_vec);\r
374     env->DeleteLocalRef(cls_topicList);\r
375     NS_LOGD ("ConsumerService_getNativeTopicsList - OUT");\r
376     return nsTopicList;\r
377 }\r
378 \r
379 jobject getJavaProvider(JNIEnv *env, std::shared_ptr<OIC::Service::NSProvider> provider)\r
380 {\r
381     NS_LOGD ("ConsumerService_getJavaProvider - IN");\r
382     NS_LOGD ("ProviderId : %s\n", provider->getProviderId().c_str());\r
383 \r
384     jstring jProviderId = env->NewStringUTF(provider->getProviderId().c_str());\r
385     auto *objectHolder = JniSharedObjectHolder<OIC::Service::NSProvider>::create(provider);\r
386     if (!objectHolder)\r
387     {\r
388         NS_LOGE ("Failed to create new Object Holder for Provider");\r
389         return NULL;\r
390     }\r
391     jlong pProvider = (long)objectHolder;\r
392 \r
393     jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));\r
394     if (!cls_provider)\r
395     {\r
396         NS_LOGE ("Failed to Get ObjectClass for Provider");\r
397         return NULL;\r
398     }\r
399     jmethodID mid_provider = env->GetMethodID(\r
400                                  cls_provider, "<init>", "(Ljava/lang/String;)V");\r
401     if (!mid_provider)\r
402     {\r
403         NS_LOGE ("Failed to Get MethodID for Provider<init>");\r
404         return NULL;\r
405     }\r
406     jobject obj_provider = env->NewObject(cls_provider, mid_provider, jProviderId);\r
407     if (!obj_provider)\r
408     {\r
409         NS_LOGE ("Failed to create new Object for Provider");\r
410         return NULL;\r
411     }\r
412 \r
413     jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");\r
414     if (!nativeHandle)\r
415     {\r
416         NS_LOGE ("Failed to get nativeHandle for Provider");\r
417         return NULL;\r
418     }\r
419     env->SetLongField(obj_provider, nativeHandle, pProvider);\r
420 \r
421     env->DeleteLocalRef(cls_provider);\r
422     NS_LOGD ("ConsumerService_getJavaProvider - OUT");\r
423     return obj_provider;\r
424 }\r
425 \r
426 jobject getJavaMessageType(JNIEnv *env, OIC::Service::NSMessage::NSMessageType type)\r
427 {\r
428     NS_LOGD ("ConsumerService_getJavaMessageType - IN");\r
429     jobject messageType = NULL;\r
430     switch (type)\r
431     {\r
432         case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_ALERT:\r
433             {\r
434                 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,\r
435                                           "ALERT", "Lorg/iotivity/service/ns/common/Message$MessageType;");\r
436                 messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);\r
437                 break;\r
438             }\r
439         case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_NOTICE:\r
440             {\r
441                 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,\r
442                                           "NOTICE", "Lorg/iotivity/service/ns/common/Message$MessageType;");\r
443                 messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);\r
444                 break;\r
445             }\r
446         case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_EVENT:\r
447             {\r
448                 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,\r
449                                           "EVENT", "Lorg/iotivity/service/ns/common/Message$MessageType;");\r
450                 messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);\r
451                 break;\r
452             }\r
453         case OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_INFO:\r
454             {\r
455                 static jfieldID fieldID = env->GetStaticFieldID(g_cls_Message_Type,\r
456                                           "INFO", "Lorg/iotivity/service/ns/common/Message$MessageType;");\r
457                 messageType = env->GetStaticObjectField(g_cls_Message_Type, fieldID);\r
458                 break;\r
459             }\r
460         default:\r
461             {\r
462                 messageType = NULL;\r
463                 break;\r
464             }\r
465     }\r
466     NS_LOGD ("ConsumerService_getJavaMessageType - OUT");\r
467     return messageType;\r
468 }\r
469 \r
470 jobject getJavaMessage(JNIEnv *env, OIC::Service::NSMessage message)\r
471 {\r
472     NS_LOGD ("ConsumerService_getJavaMessage - IN");\r
473 \r
474     NS_LOGD ("id : %llu\n", message.getMessageId());\r
475     NS_LOGD ("title : %s\n", message.getTitle().c_str());\r
476     NS_LOGD ("content : %s\n", message.getContentText().c_str());\r
477     NS_LOGD ("source : %s\n", message.getSourceName().c_str());\r
478 \r
479     jlong jMessageId = (jlong) message.getMessageId();\r
480     jstring jProviderId = env->NewStringUTF(message.getProviderId().c_str());\r
481     jstring jTitle = env->NewStringUTF(message.getTitle().c_str());\r
482     jstring jContentText = env->NewStringUTF(message.getContentText().c_str());\r
483     jstring jSourceName = env->NewStringUTF(message.getSourceName().c_str());\r
484     jstring jTopic = env->NewStringUTF(message.getTopic().c_str());\r
485 \r
486     jstring jTime = env->NewStringUTF(message.getTime().c_str());\r
487     jlong jTTL = (jlong) message.getTTL();\r
488 \r
489     jclass cls_message = (jclass) (env->NewLocalRef(g_cls_Message));\r
490     if (!cls_message)\r
491     {\r
492         NS_LOGE ("Failed to Get ObjectClass for Message");\r
493         return NULL ;\r
494     }\r
495     jmethodID mid_message = env->GetMethodID(\r
496                                 cls_message, "<init>",\r
497                                 "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");\r
498     if (!mid_message)\r
499     {\r
500         NS_LOGE ("Failed to Get MethodID for Message<init>");\r
501         return NULL;\r
502     }\r
503     jobject obj_message = env->NewObject(cls_message, mid_message,\r
504                                          jTitle, jContentText, jSourceName);\r
505     if (!obj_message)\r
506     {\r
507         NS_LOGE ("Failed to Get Java Object for Message");\r
508         return NULL;\r
509     }\r
510 \r
511     jfieldID fid_messageId = env->GetFieldID(cls_message, "mMessageId", "J");\r
512     if (!fid_messageId)\r
513     {\r
514         NS_LOGE ("Failed to get field MessageID for Message");\r
515         return NULL;\r
516     }\r
517     env->SetLongField(obj_message, fid_messageId, jMessageId);\r
518 \r
519     jfieldID fid_providerId = env->GetFieldID(cls_message, "mProviderId", "Ljava/lang/String;");\r
520     if (!fid_providerId)\r
521     {\r
522         NS_LOGE ("Failed to get field ProviderID for Message");\r
523         return NULL;\r
524     }\r
525     env->SetObjectField(obj_message, fid_providerId, jProviderId);\r
526 \r
527     jfieldID fid_time = env->GetFieldID(cls_message, "mTime", "Ljava/lang/String;");\r
528     if (!fid_time)\r
529     {\r
530         NS_LOGE ("Failed to get field Time for Message");\r
531         return NULL;\r
532     }\r
533     env->SetObjectField(obj_message, fid_time, jTime);\r
534 \r
535     jfieldID fid_ttl = env->GetFieldID(cls_message, "mTTL", "J");\r
536     if (!fid_ttl)\r
537     {\r
538         NS_LOGE ("Failed to get field TTL for Message");\r
539         return NULL;\r
540     }\r
541     env->SetLongField(obj_message, fid_ttl, jTTL);\r
542 \r
543     jfieldID fid_topic = env->GetFieldID(cls_message, "mTopic", "Ljava/lang/String;");\r
544     if (!fid_topic)\r
545     {\r
546         NS_LOGE ("Failed to get mTopic for Message");\r
547         return NULL;\r
548     }\r
549     env->SetObjectField(obj_message, fid_topic, jTopic);\r
550 \r
551     OIC::Service::NSMediaContents *mediaCont = message.getMediaContents();\r
552     if (mediaCont != nullptr)\r
553     {\r
554         jstring jIconImage = env->NewStringUTF(mediaCont->getIconImage().c_str());\r
555         jclass cls_mediaContents = (jclass) (env->NewLocalRef(g_cls_MediaContents));\r
556         if (!cls_mediaContents)\r
557         {\r
558             NS_LOGE ("Failed to Get ObjectClass for MediaContents");\r
559             return NULL;\r
560         }\r
561         jmethodID mid_mediaContents = env->GetMethodID(\r
562                                           cls_mediaContents, "<init>", "(Ljava/lang/String;)V");\r
563         if (!mid_mediaContents)\r
564         {\r
565             NS_LOGE ("Failed to Get MethodID for MediaContents<init>");\r
566             return NULL;\r
567         }\r
568         jobject obj_mediaContents = env->NewObject(cls_mediaContents, mid_mediaContents,\r
569                                     jIconImage);\r
570 \r
571         jfieldID fid_mediaContents = env->GetFieldID(cls_message, "mMediaContents",\r
572                                      "Lorg/iotivity/service/ns/common/MediaContents;");\r
573         if (!fid_mediaContents)\r
574         {\r
575             NS_LOGE ("Failed to get field mediaContents for Message");\r
576             return NULL;\r
577         }\r
578         env->SetObjectField(obj_message, fid_mediaContents, obj_mediaContents);\r
579 \r
580     }\r
581 \r
582     jobject jType = getJavaMessageType(env, message.getType());\r
583     if (jType)\r
584     {\r
585         jfieldID fid_type = env->GetFieldID(cls_message, "mType",\r
586                                             "Lorg/iotivity/service/ns/common/Message$MessageType;");\r
587         if (!fid_type)\r
588         {\r
589             NS_LOGE ("Failed to get field Type for Message");\r
590             return NULL;\r
591         }\r
592         env->SetObjectField(obj_message, fid_type, jType);\r
593     }\r
594 \r
595     NS_LOGD ("Reading OCRepresentation Object from Native");\r
596 \r
597     OC::OCRepresentation *ocRepresentation = new OC::OCRepresentation(message.getExtraInfo());\r
598     jlong handle = reinterpret_cast<jlong>(ocRepresentation);\r
599     jobject jRepresentation = env->NewObject(g_cls_OcRepresentation, g_mid_OcRepresentation_N_ctor_bool,\r
600                               handle, true);\r
601     if (!jRepresentation)\r
602     {\r
603         NS_LOGE ("Failed to create OcRepresentation");\r
604         delete ocRepresentation;\r
605         return NULL;\r
606     }\r
607     else\r
608     {\r
609         NS_LOGD ("Created OCRepresentation Object from Native");\r
610     }\r
611     jfieldID fid_extraInfo = env->GetFieldID(cls_message, "mExtraInfo",\r
612                              "Lorg/iotivity/base/OcRepresentation;");\r
613     if (!fid_extraInfo)\r
614     {\r
615         NS_LOGE ("Failed to get mExtraInfo for Message");\r
616         delete ocRepresentation;\r
617         return NULL;\r
618     }\r
619     NS_LOGD ("setting extraInfo field");\r
620     env->SetObjectField(obj_message, fid_extraInfo, jRepresentation);\r
621 \r
622     env->DeleteLocalRef(cls_message);\r
623     NS_LOGD ("ConsumerService_getJavaMessage - OUT");\r
624     return obj_message;\r
625 }\r
626 \r
627 void onDiscoverProvider(std::shared_ptr<OIC::Service::NSProvider> provider)\r
628 {\r
629     NS_LOGD ("ConsumerService_onDiscoverProvider - IN");\r
630 \r
631     jint envRet = 0;;\r
632     JNIEnv *env = GetJNIEnv(&envRet);\r
633     if (NULL == env)\r
634     {\r
635         return ;\r
636     }\r
637 \r
638     jobject jDiscoverListener = (jobject) env->NewLocalRef(g_obj_discoverListener);\r
639     if (!jDiscoverListener)\r
640     {\r
641         NS_LOGE ("Failed to Get jDiscoverListener");\r
642         if (JNI_EDETACHED == envRet)\r
643         {\r
644             g_jvm_consumer->DetachCurrentThread();\r
645         }\r
646         return ;\r
647     }\r
648 \r
649     jobject obj_provider = getJavaProvider(env, provider);\r
650     if (!obj_provider)\r
651     {\r
652         NS_LOGE ("Failed to Get Provider Object");\r
653         if (JNI_EDETACHED == envRet)\r
654         {\r
655             g_jvm_consumer->DetachCurrentThread();\r
656         }\r
657         return ;\r
658     }\r
659 \r
660     jclass cls = env->GetObjectClass(jDiscoverListener);\r
661     if (!cls)\r
662     {\r
663         NS_LOGE ("Failed to Get ObjectClass for jDiscoverListener");\r
664         if (JNI_EDETACHED == envRet)\r
665         {\r
666             g_jvm_consumer->DetachCurrentThread();\r
667         }\r
668         return ;\r
669     }\r
670     jmethodID mid = env->GetMethodID(\r
671                         cls,\r
672                         "onProviderDiscovered",\r
673                         "(Lorg/iotivity/service/ns/consumer/Provider;)V");\r
674     if (!mid)\r
675     {\r
676         NS_LOGE ("Failed to Get MethodID for onProviderDiscovered");\r
677         if (JNI_EDETACHED == envRet)\r
678         {\r
679             g_jvm_consumer->DetachCurrentThread();\r
680         }\r
681         return ;\r
682     }\r
683 \r
684     env->CallVoidMethod(jDiscoverListener, mid, obj_provider);\r
685 \r
686     env->DeleteLocalRef(jDiscoverListener);\r
687     if (JNI_EDETACHED == envRet)\r
688     {\r
689         g_jvm_consumer->DetachCurrentThread();\r
690     }\r
691     NS_LOGD ("ConsumerService_onDiscoverProvider - OUT");\r
692     return ;\r
693 }\r
694 \r
695 void onProviderState( OIC::Service::NSProviderState state)\r
696 {\r
697     NS_LOGD ("ConsumerService_onProviderState -IN");\r
698 \r
699     jint envRet = 0;;\r
700     JNIEnv *env = GetJNIEnv(&envRet);\r
701     if (NULL == env)\r
702     {\r
703         return ;\r
704     }\r
705 \r
706     jobject jAcceptListener = (jobject) env->NewLocalRef(g_obj_acceptListener);\r
707     if (!jAcceptListener)\r
708     {\r
709         NS_LOGE ("Failed to Get jAcceptListener");\r
710         if (JNI_EDETACHED == envRet)\r
711         {\r
712             g_jvm_consumer->DetachCurrentThread();\r
713         }\r
714         return ;\r
715     }\r
716     jobject obj_state = getJavaProviderState(env, state);\r
717     if (!obj_state)\r
718     {\r
719         NS_LOGE ("Failed to Get ProviderState Object");\r
720         if (JNI_EDETACHED == envRet)\r
721         {\r
722             g_jvm_consumer->DetachCurrentThread();\r
723         }\r
724         return ;\r
725     }\r
726 \r
727     jclass cls = env->GetObjectClass(jAcceptListener);\r
728     if (!cls)\r
729     {\r
730         NS_LOGE ("Failed to Get ObjectClass for jAcceptListener");\r
731         if (JNI_EDETACHED == envRet)\r
732         {\r
733             g_jvm_consumer->DetachCurrentThread();\r
734         }\r
735         return ;\r
736     }\r
737     jmethodID mid = env->GetMethodID(\r
738                         cls,\r
739                         "onProviderStateReceived",\r
740                         "(Lorg/iotivity/service/ns/consumer/Provider$ProviderState;)V");\r
741     if (!mid)\r
742     {\r
743         NS_LOGE ("Failed to Get MethodID for onProviderState");\r
744         if (JNI_EDETACHED == envRet)\r
745         {\r
746             g_jvm_consumer->DetachCurrentThread();\r
747         }\r
748         return ;\r
749     }\r
750     env->CallVoidMethod(jAcceptListener, mid, obj_state);\r
751 \r
752     env->DeleteLocalRef(jAcceptListener);\r
753     if (JNI_EDETACHED == envRet)\r
754     {\r
755         g_jvm_consumer->DetachCurrentThread();\r
756     }\r
757     NS_LOGD ("ConsumerService_onProviderState -OUT");\r
758     return ;\r
759 \r
760 }\r
761 \r
762 void onMessagePosted(OIC::Service::NSMessage message)\r
763 {\r
764     NS_LOGD ("ConsumerService_onMessagePosted -IN");\r
765 \r
766     jint envRet = 0;;\r
767     JNIEnv *env = GetJNIEnv(&envRet);\r
768     if (NULL == env)\r
769     {\r
770         return ;\r
771     }\r
772 \r
773     jobject jPostListener = (jobject) env->NewLocalRef(g_obj_postListener);\r
774     if (!jPostListener)\r
775     {\r
776         NS_LOGE ("Failed to Get jPostListener");\r
777         if (JNI_EDETACHED == envRet)\r
778         {\r
779             g_jvm_consumer->DetachCurrentThread();\r
780         }\r
781         return ;\r
782     }\r
783 \r
784     jobject obj_message = getJavaMessage( env, message);\r
785     if (!obj_message)\r
786     {\r
787         NS_LOGE ("Failed to Get Message Object");\r
788         if (JNI_EDETACHED == envRet)\r
789         {\r
790             g_jvm_consumer->DetachCurrentThread();\r
791         }\r
792         return ;\r
793     }\r
794     jclass cls = env->GetObjectClass(jPostListener);\r
795     if (!cls)\r
796     {\r
797         NS_LOGE ("Failed to Get ObjectClass for jPostListener");\r
798         if (JNI_EDETACHED == envRet)\r
799         {\r
800             g_jvm_consumer->DetachCurrentThread();\r
801         }\r
802         return ;\r
803     }\r
804     jmethodID mid = env->GetMethodID(\r
805                         cls,\r
806                         "onMessageReceived",\r
807                         "(Lorg/iotivity/service/ns/common/Message;)V");\r
808     if (!mid)\r
809     {\r
810         NS_LOGE ("Failed to Get MethodID for onMessageReceived");\r
811         if (JNI_EDETACHED == envRet)\r
812         {\r
813             g_jvm_consumer->DetachCurrentThread();\r
814         }\r
815         return ;\r
816     }\r
817 \r
818     env->CallVoidMethod(jPostListener, mid, obj_message);\r
819 \r
820     env->DeleteLocalRef(jPostListener);\r
821     if (JNI_EDETACHED == envRet)\r
822     {\r
823         g_jvm_consumer->DetachCurrentThread();\r
824     }\r
825     NS_LOGD ("ConsumerService_onMessagePosted -OUT");\r
826     return ;\r
827 }\r
828 \r
829 void onSyncInfoReceived(OIC::Service::NSSyncInfo sync)\r
830 {\r
831     NS_LOGD ("ConsumerService_onSyncInfoReceived - IN");\r
832 \r
833     jint envRet = 0;\r
834     JNIEnv *env = GetJNIEnv(&envRet);\r
835     if (NULL == env)\r
836     {\r
837         return ;\r
838     }\r
839 \r
840     jobject jSyncListener = (jobject) env->NewLocalRef(g_obj_syncListener);\r
841     if (!jSyncListener)\r
842     {\r
843         NS_LOGE ("Failed to Get jSyncListener");\r
844         if (JNI_EDETACHED == envRet)\r
845         {\r
846             g_jvm_consumer->DetachCurrentThread();\r
847         }\r
848         return ;\r
849     }\r
850 \r
851     NS_LOGD ("Sync ID : %llu\n", sync.getMessageId());\r
852     NS_LOGD ("Sync ProviderId : %s\n", sync.getProviderId().c_str());\r
853     NS_LOGD ("Sync STATE : %d\n", (int) sync.getState());\r
854 \r
855     jlong jMessageId = (jlong) sync.getMessageId();\r
856     jstring jProviderId = env->NewStringUTF(sync.getProviderId().c_str());\r
857     jobject syncType = getJavaSyncType(env, sync.getState());\r
858     if (!syncType)\r
859     {\r
860         NS_LOGE ("Failed to Get syncType for SyncInfo");\r
861         if (JNI_EDETACHED == envRet)\r
862         {\r
863             g_jvm_consumer->DetachCurrentThread();\r
864         }\r
865         return ;\r
866     }\r
867     jclass cls_SyncInfo = (jclass) (env->NewLocalRef(g_cls_SyncInfo));\r
868     if (!cls_SyncInfo)\r
869     {\r
870         NS_LOGE ("Failed to Get ObjectClass for SyncInfo");\r
871         if (JNI_EDETACHED == envRet)\r
872         {\r
873             g_jvm_consumer->DetachCurrentThread();\r
874         }\r
875         return ;\r
876     }\r
877     jmethodID mid_syncInfo = env->GetMethodID(\r
878                                  cls_SyncInfo,\r
879                                  "<init>",\r
880                                  "(JLjava/lang/String;Lorg/iotivity/service/ns/common/SyncInfo$SyncType;)V");\r
881     if (!mid_syncInfo)\r
882     {\r
883         NS_LOGE ("Failed to Get MethodID for SyncInfo");\r
884         if (JNI_EDETACHED == envRet)\r
885         {\r
886             g_jvm_consumer->DetachCurrentThread();\r
887         }\r
888         return ;\r
889     }\r
890 \r
891     jobject obj_syncInfo = env->NewObject( cls_SyncInfo, mid_syncInfo,\r
892                                            jMessageId, jProviderId, syncType);\r
893     if (!obj_syncInfo)\r
894     {\r
895         NS_LOGE ("Failed to Get Object for SyncInfo");\r
896         if (JNI_EDETACHED == envRet)\r
897         {\r
898             g_jvm_consumer->DetachCurrentThread();\r
899         }\r
900         return ;\r
901     }\r
902 \r
903     jclass cls = env->GetObjectClass(jSyncListener);\r
904     if (!cls)\r
905     {\r
906         NS_LOGE ("Failed to Get ObjectClass for jSyncListener");\r
907         if (JNI_EDETACHED == envRet)\r
908         {\r
909             g_jvm_consumer->DetachCurrentThread();\r
910         }\r
911         return ;\r
912     }\r
913     jmethodID mid = env->GetMethodID(\r
914                         cls,\r
915                         "onSyncInfoReceived",\r
916                         "(Lorg/iotivity/service/ns/common/SyncInfo;)V");\r
917     if (!mid)\r
918     {\r
919         NS_LOGE ("Failed to Get MethodID for onSyncInfoReceived");\r
920         if (JNI_EDETACHED == envRet)\r
921         {\r
922             g_jvm_consumer->DetachCurrentThread();\r
923         }\r
924         return ;\r
925     }\r
926 \r
927     env->CallVoidMethod(jSyncListener, mid, obj_syncInfo);\r
928 \r
929     env->DeleteLocalRef(jSyncListener);\r
930     env->DeleteLocalRef(cls_SyncInfo);\r
931     if (JNI_EDETACHED == envRet)\r
932     {\r
933         g_jvm_consumer->DetachCurrentThread();\r
934     }\r
935     NS_LOGD ("ConsumerService_onSyncInfoReceived - OUT");\r
936     return ;\r
937 }\r
938 \r
939 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStart\r
940 (JNIEnv *env, jobject jObj, jobject jDiscoverListener)\r
941 {\r
942     NS_LOGD ("ConsumerService_StartConsumer - IN");\r
943     if (!jDiscoverListener)\r
944     {\r
945         ThrowNSException(JNI_INVALID_VALUE, "Listener cannot be null");\r
946         return;\r
947     }\r
948     if (g_obj_discoverListener != NULL)\r
949     {\r
950         env->DeleteGlobalRef(g_obj_discoverListener);\r
951     }\r
952     g_obj_discoverListener = (jobject) env->NewGlobalRef(jDiscoverListener);\r
953 \r
954     OIC::Service::NSResult result  = OIC::Service::NSConsumerService::getInstance()->start(\r
955                                          onDiscoverProvider);\r
956 \r
957     if (result !=  OIC::Service::NSResult::OK)\r
958     {\r
959         ThrowNSException((int) result, "Fail to start ConsumerService");\r
960         return;\r
961     }\r
962     NS_LOGD ("ConsumerService_StartConsumer - OUT");\r
963     return;\r
964 \r
965 }\r
966 \r
967 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeStop\r
968 (JNIEnv *env, jobject jObj)\r
969 {\r
970     NS_LOGD ("ConsumerService_StopConsumer - IN");\r
971 \r
972     env->DeleteGlobalRef(g_obj_postListener);\r
973     env->DeleteGlobalRef(g_obj_syncListener);\r
974     env->DeleteGlobalRef(g_obj_discoverListener);\r
975     env->DeleteGlobalRef(g_obj_acceptListener);\r
976     g_obj_postListener = NULL;\r
977     g_obj_syncListener = NULL;\r
978     g_obj_discoverListener = NULL;\r
979     g_obj_acceptListener = NULL;\r
980     OIC::Service::NSResult result  = OIC::Service::NSConsumerService::getInstance()->stop();\r
981 \r
982     if (result !=  OIC::Service::NSResult::OK)\r
983     {\r
984         ThrowNSException((int) result, "Fail to Stop ConsumerService");\r
985         return;\r
986     }\r
987     NS_LOGD ("ConsumerService_StopConsumer - OUT");\r
988     return;\r
989 }\r
990 \r
991 JNIEXPORT void JNICALL\r
992 Java_org_iotivity_service_ns_consumer_ConsumerService_nativeEnableRemoteService\r
993 (JNIEnv *env, jobject jObj, jstring jServerAddress)\r
994 {\r
995     NS_LOGD ("ConsumerService_EnableRemoteService - IN");\r
996     if (!jServerAddress)\r
997     {\r
998         ThrowNSException(JNI_INVALID_VALUE, "EnableRemoteService server address NULL");\r
999         return;\r
1000     }\r
1001     const char *serverAddress = env->GetStringUTFChars(jServerAddress, 0);\r
1002     OIC::Service::NSResult result =\r
1003         OIC::Service::NSConsumerService::getInstance()->enableRemoteService(std::string(serverAddress));\r
1004 \r
1005     if (result !=  OIC::Service::NSResult::OK)\r
1006     {\r
1007         ThrowNSException((int) result, "Fail to EnableRemoteService");\r
1008         return;\r
1009     }\r
1010     env->ReleaseStringUTFChars(jServerAddress, serverAddress);\r
1011     NS_LOGD ("ConsumerService_EnableRemoteService - OUT");\r
1012     return;\r
1013 }\r
1014 \r
1015 JNIEXPORT void JNICALL\r
1016 Java_org_iotivity_service_ns_consumer_ConsumerService_nativeSubscribeMQService\r
1017 (JNIEnv *env, jobject jObj, jstring jserverAddress, jstring jTopicName)\r
1018 {\r
1019     NS_LOGD ("ConsumerService: nativeSubscribeMQService - IN");\r
1020     if (!jserverAddress)\r
1021     {\r
1022         ThrowNSException(JNI_INVALID_VALUE, "Server Address Can't be NULL");\r
1023         return;\r
1024     }\r
1025     if (!jTopicName)\r
1026     {\r
1027         ThrowNSException(JNI_INVALID_VALUE, "TopicName Can't be NULL");\r
1028         return;\r
1029     }\r
1030 \r
1031     const char *address = env->GetStringUTFChars( jserverAddress, NULL);\r
1032     std::string servAddress(address);\r
1033     const char *topic = env->GetStringUTFChars( jTopicName, NULL);\r
1034     std::string topicName(topic);\r
1035 \r
1036     OIC::Service::NSResult result  =\r
1037         OIC::Service::NSConsumerService::getInstance()->subscribeMQService(\r
1038             servAddress, topicName);\r
1039     if (result !=  OIC::Service::NSResult::OK)\r
1040     {\r
1041         ThrowNSException((int) result, "Fail to Subscribe to MQ Service");\r
1042         return;\r
1043     }\r
1044     env->ReleaseStringUTFChars(jserverAddress, address);\r
1045     env->ReleaseStringUTFChars(jTopicName, topic);\r
1046     NS_LOGD ("ConsumerService: nativeSubscribeMQService - OUT");\r
1047     return;\r
1048 }\r
1049 \r
1050 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_ConsumerService_nativeRescanProvider\r
1051 (JNIEnv *env, jobject jObj)\r
1052 {\r
1053     NS_LOGD ("ConsumerService_RescanProvider - IN");\r
1054     OIC::Service::NSResult result  = OIC::Service::NSConsumerService::getInstance()->rescanProvider();\r
1055     if (result !=  OIC::Service::NSResult::OK)\r
1056     {\r
1057         ThrowNSException((int) result, "Fail to RescanProvider");\r
1058         return;\r
1059     }\r
1060     NS_LOGD ("ConsumerService_RescanProvider - OUT");\r
1061     return;\r
1062 \r
1063 }\r
1064 \r
1065 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSubscribe\r
1066 (JNIEnv *env, jobject jObj)\r
1067 {\r
1068     NS_LOGD ("Provider_Subscribe -IN");\r
1069     OIC::Service::NSResult result  = OIC::Service::NSResult::ERROR;\r
1070     jclass providerClass = env->GetObjectClass(jObj);\r
1071     if (!providerClass)\r
1072     {\r
1073         ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
1074         return ;\r
1075     }\r
1076 \r
1077     jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
1078     if (!nativeHandle)\r
1079     {\r
1080         ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
1081         return ;\r
1082     }\r
1083     jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
1084     if (jProvider)\r
1085     {\r
1086         NS_LOGD ("calling subscribe on mNativeHandle");\r
1087         JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
1088             reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
1089         try\r
1090         {\r
1091             result  = objectHolder->get()->subscribe();\r
1092         }\r
1093         catch (OIC::Service::NSException ex)\r
1094         {\r
1095             ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
1096             return;\r
1097         }\r
1098     }\r
1099     else\r
1100     {\r
1101         NS_LOGE ("Couldn't find Provider");\r
1102         ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
1103     }\r
1104     if (result !=  OIC::Service::NSResult::OK)\r
1105     {\r
1106         ThrowNSException((int) result, "Fail to Subscribe Provider");\r
1107         return;\r
1108     }\r
1109     NS_LOGD ("Provider_Subscribe -OUT");\r
1110     return;\r
1111 }\r
1112 \r
1113 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeUnsubscribe\r
1114 (JNIEnv *env, jobject jObj)\r
1115 {\r
1116     NS_LOGD ("Provider_UnSubscribe -IN");\r
1117     OIC::Service::NSResult result  = OIC::Service::NSResult::ERROR;\r
1118     jclass providerClass = env->GetObjectClass(jObj);\r
1119     if (!providerClass)\r
1120     {\r
1121         ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
1122         return ;\r
1123     }\r
1124 \r
1125     jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
1126     if (!nativeHandle)\r
1127     {\r
1128         ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
1129         return ;\r
1130     }\r
1131     jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
1132     if (jProvider)\r
1133     {\r
1134         NS_LOGD ("calling subscribe on mNativeHandle");\r
1135         JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
1136             reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
1137         try\r
1138         {\r
1139             result  = objectHolder->get()->unsubscribe();\r
1140         }\r
1141         catch (OIC::Service::NSException ex)\r
1142         {\r
1143             ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
1144             return;\r
1145         }\r
1146     }\r
1147     else\r
1148     {\r
1149         NS_LOGE ("Couldn't find Provider");\r
1150         ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
1151     }\r
1152     if (result !=  OIC::Service::NSResult::OK)\r
1153     {\r
1154         ThrowNSException((int) result, "Fail to UnSubscribe Provider");\r
1155         return;\r
1156     }\r
1157     NS_LOGD ("Provider_UnSubscribe -OUT");\r
1158     return;\r
1159 }\r
1160 \r
1161 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSendSyncInfo\r
1162 (JNIEnv *env, jobject jObj, jlong jMessageId, jint jSyncType)\r
1163 {\r
1164     NS_LOGD ("Provider_SendSyncInfo - IN");\r
1165     OIC::Service::NSResult result  = OIC::Service::NSResult::ERROR;\r
1166     if (!jMessageId)\r
1167     {\r
1168         ThrowNSException(JNI_INVALID_VALUE, "MessageId cannot be 0");\r
1169         return ;\r
1170     }\r
1171 \r
1172     jclass providerClass = env->GetObjectClass(jObj);\r
1173     if (!providerClass)\r
1174     {\r
1175         ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
1176         return ;\r
1177     }\r
1178 \r
1179     jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
1180     if (!nativeHandle)\r
1181     {\r
1182         ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
1183         return ;\r
1184     }\r
1185     uint64_t messageId = (uint64_t) jMessageId;\r
1186 \r
1187     NS_LOGD ("!!!!!!jMessageId: %lld", jMessageId);\r
1188     NS_LOGD ("!!!!!!messageId: %lld", messageId);\r
1189 \r
1190     jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
1191     if (jProvider)\r
1192     {\r
1193         NS_LOGD ("calling SendSyncInfo on mNativeHandle");\r
1194         JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
1195             reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
1196         try\r
1197         {\r
1198             result  = objectHolder->get()->sendSyncInfo(messageId,\r
1199                       (OIC::Service::NSSyncInfo::NSSyncType)jSyncType);\r
1200         }\r
1201         catch (OIC::Service::NSException ex)\r
1202         {\r
1203             ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
1204             return;\r
1205         }\r
1206     }\r
1207     else\r
1208     {\r
1209         NS_LOGE ("Couldn't find Provider");\r
1210         ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
1211     }\r
1212     if (result !=  OIC::Service::NSResult::OK)\r
1213     {\r
1214         ThrowNSException((int) result, "Fail to Send sync info");\r
1215         return;\r
1216     }\r
1217     NS_LOGD ("Provider_SendSyncInfo - OUT");\r
1218     return;\r
1219 }\r
1220 \r
1221 \r
1222 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeSetListener\r
1223 (JNIEnv *env, jobject jObj, jobject jAcceptListener, jobject jPostListener, jobject jSyncListener)\r
1224 {\r
1225     NS_LOGD ("Provider_SetListener - IN");\r
1226     if (!jPostListener || !jSyncListener || !jAcceptListener)\r
1227     {\r
1228         ThrowNSException(JNI_INVALID_VALUE, "Listener cannot be null");\r
1229         return ;\r
1230     }\r
1231 \r
1232     jclass providerClass = env->GetObjectClass(jObj);\r
1233     if (!providerClass)\r
1234     {\r
1235         ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
1236         return ;\r
1237     }\r
1238 \r
1239     jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
1240     if (!nativeHandle)\r
1241     {\r
1242         ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
1243         return ;\r
1244     }\r
1245     jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
1246     if (jProvider)\r
1247     {\r
1248         NS_LOGD ("calling SetListener on mNativeHandle");\r
1249         if (g_obj_acceptListener != NULL)\r
1250         {\r
1251             env->DeleteGlobalRef(g_obj_acceptListener);\r
1252         }\r
1253         if (g_obj_postListener != NULL)\r
1254         {\r
1255             env->DeleteGlobalRef(g_obj_postListener);\r
1256         }\r
1257         if (g_obj_syncListener != NULL)\r
1258         {\r
1259             env->DeleteGlobalRef(g_obj_syncListener);\r
1260         }\r
1261         g_obj_acceptListener = (jobject) env->NewGlobalRef(jAcceptListener);\r
1262         g_obj_postListener = (jobject) env->NewGlobalRef(jPostListener);\r
1263         g_obj_syncListener = (jobject) env->NewGlobalRef(jSyncListener);\r
1264 \r
1265         JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
1266             reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
1267         objectHolder->get()->setListener(onProviderState, onMessagePosted, onSyncInfoReceived);\r
1268     }\r
1269     else\r
1270     {\r
1271         NS_LOGE ("Couldn't find Provider");\r
1272         ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
1273     }\r
1274     NS_LOGD ("Provider_SetListener - OUT");\r
1275     return;\r
1276 }\r
1277 \r
1278 JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeGetTopicList\r
1279 (JNIEnv *env, jobject jObj)\r
1280 {\r
1281     NS_LOGD ("Provider_nativeGetTopicList - IN");\r
1282     jclass providerClass = env->GetObjectClass(jObj);\r
1283     if (!providerClass)\r
1284     {\r
1285         ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
1286         return NULL;\r
1287     }\r
1288 \r
1289     jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
1290     if (!nativeHandle)\r
1291     {\r
1292         ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
1293         return NULL;\r
1294     }\r
1295     jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
1296     std::shared_ptr<OIC::Service::NSTopicsList> topicList = nullptr;\r
1297     if (jProvider)\r
1298     {\r
1299         NS_LOGD ("calling subscribe on mNativeHandle");\r
1300         JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
1301             reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
1302         try\r
1303         {\r
1304             topicList = objectHolder->get()->getTopicList();\r
1305         }\r
1306         catch (OIC::Service::NSException ex)\r
1307         {\r
1308             ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
1309             return NULL;\r
1310         }\r
1311     }\r
1312     else\r
1313     {\r
1314         NS_LOGE ("Couldn't find Provider");\r
1315         ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
1316     }\r
1317     if (topicList == nullptr)\r
1318     {\r
1319         ThrowNSException(JNI_INVALID_VALUE, "Topic List doesn't exist");\r
1320         return NULL;\r
1321     }\r
1322 \r
1323     jobject obj_topicList = getJavaTopicsList(env, topicList);\r
1324 \r
1325     NS_LOGD ("Provider_nativeGetTopicList - OUT");\r
1326     return obj_topicList;\r
1327 }\r
1328 \r
1329 JNIEXPORT void JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeUpdateTopicList\r
1330 (JNIEnv *env, jobject jObj, jobject jTopicsList)\r
1331 {\r
1332     NS_LOGD ("Provider_nativeUpdateTopicList -IN");\r
1333     if (!jTopicsList)\r
1334     {\r
1335         ThrowNSException(JNI_INVALID_VALUE, "TopicList cannot be null");\r
1336         return;\r
1337     }\r
1338     std::shared_ptr<OIC::Service::NSTopicsList> nsTopicsList = getNativeTopicsList(env, jTopicsList);\r
1339     if (nsTopicsList == nullptr)\r
1340     {\r
1341         ThrowNSException(JNI_INVALID_VALUE, "NSTopicList cannot be created ");\r
1342         return;\r
1343     }\r
1344 \r
1345     jclass providerClass = env->GetObjectClass(jObj);\r
1346     if (!providerClass)\r
1347     {\r
1348         ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
1349         return;\r
1350     }\r
1351 \r
1352     jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
1353     if (!nativeHandle)\r
1354     {\r
1355         ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
1356         return;\r
1357     }\r
1358     jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
1359     OIC::Service::NSResult result = OIC::Service::NSResult::ERROR;\r
1360     if (jProvider)\r
1361     {\r
1362         NS_LOGD ("calling subscribe on mNativeHandle");\r
1363         JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
1364             reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
1365         try\r
1366         {\r
1367             result = objectHolder->get()->updateTopicList(nsTopicsList);\r
1368         }\r
1369         catch (OIC::Service::NSException ex)\r
1370         {\r
1371             ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
1372             return;\r
1373         }\r
1374     }\r
1375     else\r
1376     {\r
1377         NS_LOGE ("Couldn't find Provider");\r
1378         ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
1379     }\r
1380     if (result !=  OIC::Service::NSResult::OK)\r
1381     {\r
1382         ThrowNSException((int) result, "Fail to Update Interest Topics");\r
1383         return;\r
1384     }\r
1385     NS_LOGD ("Provider_nativeUpdateTopicList -OUT");\r
1386     return;\r
1387 }\r
1388 \r
1389 JNIEXPORT jobject JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeGetProviderState\r
1390 (JNIEnv *env, jobject jObj)\r
1391 {\r
1392     NS_LOGD ("Provider_nativeGetProviderState - IN");\r
1393     jclass providerClass = env->GetObjectClass(jObj);\r
1394     if (!providerClass)\r
1395     {\r
1396         ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
1397         return NULL;\r
1398     }\r
1399 \r
1400     jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
1401     if (!nativeHandle)\r
1402     {\r
1403         ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
1404         return NULL;\r
1405     }\r
1406     jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
1407     OIC::Service::NSProviderState state = OIC::Service::NSProviderState::DENY;\r
1408     if (jProvider)\r
1409     {\r
1410         NS_LOGD ("calling getProviderState on mNativeHandle");\r
1411         JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
1412             reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
1413         try\r
1414         {\r
1415             state = objectHolder->get()->getProviderState();\r
1416         }\r
1417         catch (OIC::Service::NSException ex)\r
1418         {\r
1419             ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
1420             return NULL;\r
1421         }\r
1422     }\r
1423     else\r
1424     {\r
1425         NS_LOGE ("Couldn't find Provider");\r
1426         ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
1427     }\r
1428     jobject obj_state = getJavaProviderState(env, state);\r
1429 \r
1430     NS_LOGD ("Provider_nativeGetProviderState - OUT");\r
1431     return obj_state;\r
1432 }\r
1433 \r
1434 JNIEXPORT jboolean JNICALL Java_org_iotivity_service_ns_consumer_Provider_nativeIsSubscribed\r
1435 (JNIEnv *env, jobject jObj)\r
1436 {\r
1437     NS_LOGD ("nativeIsSubscribed - IN");\r
1438     jclass providerClass = env->GetObjectClass(jObj);\r
1439     if (!providerClass)\r
1440     {\r
1441         ThrowNSException(JNI_INVALID_VALUE, "Failed to Get ObjectClass for Provider");\r
1442         return (jboolean)false;\r
1443     }\r
1444 \r
1445     jfieldID nativeHandle = env->GetFieldID(providerClass, "mNativeHandle", "J");\r
1446     if (!nativeHandle)\r
1447     {\r
1448         ThrowNSException(JNI_INVALID_VALUE, "Failed to get nativeHandle for Provider");\r
1449         return (jboolean)false;\r
1450     }\r
1451     jlong jProvider = env->GetLongField(jObj, nativeHandle);\r
1452     if (jProvider)\r
1453     {\r
1454         NS_LOGD ("calling isSubscribe on mNativeHandle");\r
1455         JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
1456             reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(jProvider);\r
1457         try\r
1458         {\r
1459             return (jboolean) objectHolder->get()->isSubscribed();\r
1460         }\r
1461         catch (OIC::Service::NSException ex)\r
1462         {\r
1463             ThrowNSException(NATIVE_EXCEPTION, ex.what());\r
1464             return (jboolean)false;\r
1465         }\r
1466     }\r
1467     else\r
1468     {\r
1469         NS_LOGE ("Couldn't find Provider");\r
1470         ThrowNSException(JNI_NO_NATIVE_POINTER, "Fail to find native Provider");\r
1471     }\r
1472 }\r
1473 \r
1474 JNIEXPORT void JNICALL\r
1475 Java_org_iotivity_service_ns_consumer_Provider_nativeDispose\r
1476 (JNIEnv *env, jobject object)\r
1477 {\r
1478     jclass cls_provider = (jclass) (env->NewLocalRef(g_cls_Provider));\r
1479     if (!cls_provider)\r
1480     {\r
1481         NS_LOGE ("Failed to Get ObjectClass for Provider");\r
1482         return;\r
1483     }\r
1484     jfieldID nativeHandle = env->GetFieldID(cls_provider, "mNativeHandle", "J");\r
1485     if (!nativeHandle)\r
1486     {\r
1487         NS_LOGE ("Failed to get nativeHandle for Provider");\r
1488         return;\r
1489     }\r
1490     jlong handle = env->GetLongField(object, nativeHandle);\r
1491     JniSharedObjectHolder<OIC::Service::NSProvider> *objectHolder =\r
1492         reinterpret_cast<JniSharedObjectHolder<OIC::Service::NSProvider> *>(handle);\r
1493     delete objectHolder;\r
1494     return;\r
1495 }\r
1496 \r
1497 // JNI OnLoad\r
1498 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)\r
1499 {\r
1500     NS_LOGD ("ConsumerService_JNI_OnLoad");\r
1501     g_jvm_consumer = jvm;\r
1502 \r
1503     JNIEnv *env = NULL;\r
1504     if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)\r
1505     {\r
1506         NS_LOGE ("Failed to get the environment using GetEnv()");\r
1507         return JNI_ERR;\r
1508     }\r
1509 \r
1510     jclass localMessage = env->FindClass(\r
1511                               "org/iotivity/service/ns/common/Message");\r
1512     if (!localMessage)\r
1513     {\r
1514         NS_LOGE ("Failed to get local Message class");\r
1515         return JNI_ERR;\r
1516     }\r
1517     g_cls_Message = (jclass) (env->NewGlobalRef(localMessage));\r
1518     if (!g_cls_Message)\r
1519     {\r
1520         NS_LOGE ("Failed to set Global Message reference");\r
1521         return JNI_ERR;\r
1522     }\r
1523 \r
1524     jclass localProvider = env->FindClass(\r
1525                                "org/iotivity/service/ns/consumer/Provider");\r
1526     if (!localProvider)\r
1527     {\r
1528         NS_LOGE ("Failed to get local Provider class");\r
1529         return JNI_ERR;\r
1530     }\r
1531     g_cls_Provider = (jclass) (env->NewGlobalRef(localProvider));\r
1532     if (!g_cls_Provider)\r
1533     {\r
1534         NS_LOGE ("Failed to set Global Provider reference");\r
1535         return JNI_ERR;\r
1536     }\r
1537 \r
1538     jclass localSyncInfo = env->FindClass(\r
1539                                "org/iotivity/service/ns/common/SyncInfo");\r
1540     if (!localSyncInfo)\r
1541     {\r
1542         NS_LOGE ("Failed to get local SyncInfo class");\r
1543         return JNI_ERR;\r
1544     }\r
1545     g_cls_SyncInfo = (jclass) (env->NewGlobalRef(localSyncInfo));\r
1546     if (!g_cls_SyncInfo)\r
1547     {\r
1548         NS_LOGE ("Failed to set Global NSSyncInfo reference");\r
1549         return JNI_ERR;\r
1550     }\r
1551 \r
1552     jclass localSyncType = env->FindClass(\r
1553                                "org/iotivity/service/ns/common/SyncInfo$SyncType");\r
1554     if (!localSyncType)\r
1555     {\r
1556         NS_LOGE ("Failed to get local SyncType enum");\r
1557         return JNI_ERR;\r
1558     }\r
1559     g_cls_SyncType = (jclass) (env->NewGlobalRef(localSyncType));\r
1560     if (!g_cls_SyncType)\r
1561     {\r
1562         NS_LOGE ("Failed to set Global SyncType reference");\r
1563         return JNI_ERR;\r
1564     }\r
1565 \r
1566     jclass localMediaContents = env->FindClass(\r
1567                                     "org/iotivity/service/ns/common/MediaContents");\r
1568     if (!localMediaContents)\r
1569     {\r
1570         NS_LOGE ("Failed to get local MediaContents class");\r
1571         return JNI_ERR;\r
1572     }\r
1573     g_cls_MediaContents = (jclass) (env->NewGlobalRef(localMediaContents));\r
1574     if (!g_cls_MediaContents)\r
1575     {\r
1576         NS_LOGE ("Failed to set Global MediaContents reference");\r
1577         return JNI_ERR;\r
1578     }\r
1579     jclass localTopicState = env->FindClass(\r
1580                                  "org/iotivity/service/ns/common/Topic$TopicState");\r
1581     if (!localTopicState)\r
1582     {\r
1583         NS_LOGE ("Failed to get local TopicState enum");\r
1584         return JNI_ERR;\r
1585     }\r
1586     g_cls_TopicState = (jclass) (env->NewGlobalRef(localTopicState));\r
1587     if (!g_cls_TopicState)\r
1588     {\r
1589         NS_LOGE ("Failed to set Global TopicState reference");\r
1590         return JNI_ERR;\r
1591     }\r
1592 \r
1593     jclass localTopic = env->FindClass(\r
1594                             "org/iotivity/service/ns/common/Topic");\r
1595     if (!localTopic)\r
1596     {\r
1597         NS_LOGE ("Failed to get local TopicState enum");\r
1598         return JNI_ERR;\r
1599     }\r
1600     g_cls_Topic = (jclass) (env->NewGlobalRef(localTopic));\r
1601     if (!g_cls_Topic)\r
1602     {\r
1603         NS_LOGE ("Failed to set Global Topic reference");\r
1604         return JNI_ERR;\r
1605     }\r
1606 \r
1607     jclass localMessageType = env->FindClass(\r
1608                                   "org/iotivity/service/ns/common/Message$MessageType");\r
1609     if (!localMessageType)\r
1610     {\r
1611         NS_LOGE ("Failed to get local Message Type class");\r
1612         return JNI_ERR;\r
1613     }\r
1614     g_cls_Message_Type = (jclass) (env->NewGlobalRef(localMessageType));\r
1615     if (!g_cls_Message_Type)\r
1616     {\r
1617         NS_LOGE ("Failed to set Global Message Type reference");\r
1618         return JNI_ERR;\r
1619     }\r
1620 \r
1621     jclass localProviderState = env->FindClass(\r
1622                                     "org/iotivity/service/ns/consumer/Provider$ProviderState");\r
1623     if (!localProviderState)\r
1624     {\r
1625         NS_LOGE ("Failed to get localProviderState  Type class");\r
1626         return JNI_ERR;\r
1627     }\r
1628     g_cls_ProviderState = (jclass) (env->NewGlobalRef(localProviderState));\r
1629     if (!g_cls_ProviderState)\r
1630     {\r
1631         NS_LOGE ("Failed to set Global ProviderState Type reference");\r
1632         return JNI_ERR;\r
1633     }\r
1634 \r
1635     jclass localTopicsList = env->FindClass(\r
1636                                  "org/iotivity/service/ns/common/TopicsList");\r
1637     if (!localTopicsList)\r
1638     {\r
1639         NS_LOGE ("Failed to get local Topic class");\r
1640         return JNI_ERR;\r
1641     }\r
1642     g_cls_TopicsList = (jclass) (env->NewGlobalRef(localTopicsList));\r
1643     if (!g_cls_TopicsList)\r
1644     {\r
1645         NS_LOGE ("Failed to set Global TopicsList reference");\r
1646         return JNI_ERR;\r
1647     }\r
1648     //OcRepresentation\r
1649     jclass localOcRepresentation = env->FindClass("org/iotivity/base/OcRepresentation");\r
1650     if (!localOcRepresentation)\r
1651     {\r
1652         NS_LOGE ("Failed to get local OcRepresentation class");\r
1653         return JNI_ERR;\r
1654     }\r
1655     g_cls_OcRepresentation = (jclass) env->NewGlobalRef(localOcRepresentation);\r
1656     if (!g_cls_OcRepresentation)\r
1657     {\r
1658         NS_LOGE ("Failed to set Global OcRepresentation reference");\r
1659         return JNI_ERR;\r
1660     }\r
1661 \r
1662     g_mid_OcRepresentation_N_ctor_bool = env->GetMethodID(g_cls_OcRepresentation, "<init>", "(JZ)V");\r
1663     if (!g_mid_OcRepresentation_N_ctor_bool)\r
1664     {\r
1665         NS_LOGE ("Failed to get Global OcRepresentation Constructor reference");\r
1666         return JNI_ERR;\r
1667     }\r
1668 \r
1669     env->DeleteLocalRef(localMessage);\r
1670     env->DeleteLocalRef(localProvider);\r
1671     env->DeleteLocalRef(localSyncInfo);\r
1672     env->DeleteLocalRef(localSyncType);\r
1673     env->DeleteLocalRef(localMediaContents);\r
1674     env->DeleteLocalRef(localTopicState);\r
1675     env->DeleteLocalRef(localMessageType);\r
1676     env->DeleteLocalRef(localProviderState);\r
1677     env->DeleteLocalRef(localTopic);\r
1678     env->DeleteLocalRef(localTopicsList);\r
1679     env->DeleteLocalRef(localOcRepresentation);\r
1680 \r
1681     return NSExceptionInit(env);\r
1682 }\r
1683 \r
1684 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved)\r
1685 {\r
1686     NS_LOGI ("ConsumerService_JNI_OnUnload");\r
1687     JNIEnv *env = NULL;\r
1688 \r
1689     if (jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)\r
1690     {\r
1691         NS_LOGE ("Failed to get the environment using GetEnv()");\r
1692         return ;\r
1693     }\r
1694 \r
1695     env->DeleteGlobalRef(g_cls_Message);\r
1696     env->DeleteGlobalRef(g_cls_Provider);\r
1697     env->DeleteGlobalRef(g_cls_SyncInfo);\r
1698     env->DeleteGlobalRef(g_cls_SyncType);\r
1699     env->DeleteGlobalRef(g_cls_MediaContents);\r
1700     env->DeleteGlobalRef(g_cls_TopicState);\r
1701     env->DeleteGlobalRef(g_cls_Message_Type);\r
1702     env->DeleteGlobalRef(g_cls_ProviderState);\r
1703     env->DeleteGlobalRef(g_cls_Topic);\r
1704     env->DeleteGlobalRef(g_cls_TopicsList);\r
1705     env->DeleteGlobalRef(g_cls_OcRepresentation);\r
1706 }\r