2 * //******************************************************************
4 * // Copyright 2015 Intel Corporation.
6 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8 * // Licensed under the Apache License, Version 2.0 (the "License");
9 * // you may not use this file except in compliance with the License.
10 * // You may obtain a copy of the License at
12 * // http://www.apache.org/licenses/LICENSE-2.0
14 * // Unless required by applicable law or agreed to in writing, software
15 * // distributed under the License is distributed on an "AS IS" BASIS,
16 * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * // See the License for the specific language governing permissions and
18 * // limitations under the License.
20 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
22 #include "JniOcStack.h"
24 #include "OCPlatform.h"
25 #include "OCRepresentation.h"
29 * Macro to verify the validity of input argument.
31 * @param arg log level
33 #define VERIFY_VARIABLE_NULL(arg) \
34 if (nullptr == (arg)) \
36 LOGE("invalid input"); \
40 JavaVM* g_jvm = nullptr;
42 jclass g_cls_byte1DArray = nullptr;
43 jclass g_cls_byte2DArray = nullptr;
44 jclass g_cls_byte3DArray = nullptr;
45 jclass g_cls_Integer = nullptr;
46 jclass g_cls_int1DArray = nullptr;
47 jclass g_cls_int2DArray = nullptr;
48 jclass g_cls_Double = nullptr;
49 jclass g_cls_double1DArray = nullptr;
50 jclass g_cls_double2DArray = nullptr;
51 jclass g_cls_Boolean = nullptr;
52 jclass g_cls_boolean1DArray = nullptr;
53 jclass g_cls_boolean2DArray = nullptr;
54 jclass g_cls_String = nullptr;
55 jclass g_cls_String1DArray = nullptr;
56 jclass g_cls_String2DArray = nullptr;
57 jclass g_cls_LinkedList = nullptr;
58 jclass g_cls_Map = nullptr;
59 jclass g_cls_MapEntry = nullptr;
60 jclass g_cls_Set = nullptr;
61 jclass g_cls_Iterator = nullptr;
62 jclass g_cls_HashMap = nullptr;
63 jclass g_cls_OcException = nullptr;
64 jclass g_cls_OcResource = nullptr;
65 jclass g_cls_OcRepresentation = nullptr;
66 jclass g_cls_OcRepresentation1DArray = nullptr;
67 jclass g_cls_OcRepresentation2DArray = nullptr;
68 jclass g_cls_OcResourceRequest = nullptr;
69 jclass g_cls_OcResourceResponse = nullptr;
70 jclass g_cls_OcResourceHandle = nullptr;
71 jclass g_cls_OcPresenceHandle = nullptr;
72 jclass g_cls_OcRequestHandle = nullptr;
73 jclass g_cls_OcPresenceStatus = nullptr;
74 jclass g_cls_OcHeaderOption = nullptr;
75 jclass g_cls_ObservationInfo = nullptr;
76 jclass g_cls_OcResourceIdentifier = nullptr;
77 jclass g_cls_OcProvisionResult = nullptr;
78 jclass g_cls_OcSecureResource = nullptr;
79 jclass g_cls_OcOicSecAcl = nullptr;
80 jclass g_cls_OcOicSecAcl_ace = nullptr;
81 jclass g_cls_OcOicSecAcl_resr = nullptr;
82 jclass g_cls_OcOicSecAcl_validity = nullptr;
83 jclass g_cls_OcOicSecPdAcl = nullptr;
84 jclass g_cls_OcDirectPairDevice = nullptr;
86 jclass g_cls_OcCloudProvisioning = nullptr;
89 jclass g_cls_OcAccountManager = nullptr;
92 jmethodID g_mid_Integer_ctor = nullptr;
93 jmethodID g_mid_Double_ctor = nullptr;
94 jmethodID g_mid_Boolean_ctor = nullptr;
95 jmethodID g_mid_LinkedList_ctor = nullptr;
96 jmethodID g_mid_LinkedList_add_object = nullptr;
97 jmethodID g_mid_Map_entrySet = nullptr;
98 jmethodID g_mid_MapEntry_getKey = nullptr;
99 jmethodID g_mid_MapEntry_getValue = nullptr;
100 jmethodID g_mid_Set_iterator = nullptr;
101 jmethodID g_mid_Iterator_hasNext = nullptr;
102 jmethodID g_mid_Iterator_next = nullptr;
103 jmethodID g_mid_HashMap_ctor = nullptr;
104 jmethodID g_mid_HashMap_put = nullptr;
105 jmethodID g_mid_OcException_ctor = nullptr;
106 jmethodID g_mid_OcException_setNativeExceptionLocation = nullptr;
107 jmethodID g_mid_OcResource_ctor = nullptr;
108 jmethodID g_mid_OcRepresentation_N_ctor = nullptr;
109 jmethodID g_mid_OcRepresentation_N_ctor_bool = nullptr;
110 jmethodID g_mid_OcResourceRequest_N_ctor = nullptr;
111 jmethodID g_mid_OcResourceResponse_N_ctor = nullptr;
112 jmethodID g_mid_OcResourceHandle_N_ctor = nullptr;
113 jmethodID g_mid_OcPresenceHandle_N_ctor = nullptr;
115 jmethodID g_mid_OcRequestHandle_N_ctor = nullptr;
116 jmethodID g_mid_OcHeaderOption_ctor = nullptr;
117 jmethodID g_mid_OcHeaderOption_get_id = nullptr;
118 jmethodID g_mid_OcHeaderOption_get_data = nullptr;
119 jmethodID g_mid_ObservationInfo_N_ctor = nullptr;
120 jmethodID g_mid_OcPresenceStatus_get = nullptr;
121 jmethodID g_mid_OcResourceIdentifier_N_ctor = nullptr;
122 jmethodID g_mid_OcProvisionResult_ctor = nullptr;
123 jmethodID g_mid_OcSecureResource_ctor = nullptr;
124 jmethodID g_mid_OcDirectPairDevice_ctor = nullptr;
125 jmethodID g_mid_OcDirectPairDevice_dev_ctor = nullptr;
127 jmethodID g_mid_OcAccountManager_ctor = nullptr;
130 jmethodID g_mid_OcOicSecPdAcl_get_resources_cnt = nullptr;
131 jmethodID g_mid_OcOicSecPdAcl_get_resources = nullptr;
132 jmethodID g_mid_OcOicSecPdAcl_get_permission = nullptr;
133 jmethodID g_mid_OcOicSecPdAcl_get_periods_cnt = nullptr;
134 jmethodID g_mid_OcOicSecPdAcl_get_periods = nullptr;
135 jmethodID g_mid_OcOicSecPdAcl_get_recurrences = nullptr;
137 jmethodID g_mid_OcOicSecAcl_get_aces = nullptr;
138 jmethodID g_mid_OcOicSecAcl_ace_get_subjectID = nullptr;
139 jmethodID g_mid_OcOicSecAcl_ace_get_permissions = nullptr;
140 jmethodID g_mid_OcOicSecAcl_ace_get_resources = nullptr;
141 jmethodID g_mid_OcOicSecAcl_ace_get_validities = nullptr;
142 jmethodID g_mid_OcOicSecAcl_resr_get_href = nullptr;
143 jmethodID g_mid_OcOicSecAcl_resr_get_rel = nullptr;
144 jmethodID g_mid_OcOicSecAcl_resr_get_types = nullptr;
145 jmethodID g_mid_OcOicSecAcl_resr_get_typeLen = nullptr;
146 jmethodID g_mid_OcOicSecAcl_resr_get_interfaces = nullptr;
147 jmethodID g_mid_OcOicSecAcl_validity_get_getPeriod = nullptr;
148 jmethodID g_mid_OcOicSecAcl_validity_get_recurrences = nullptr;
149 jmethodID g_mid_OcOicSecAcl_validity_get_recurrenceLen = nullptr;
150 jmethodID g_mid_OcOicSecAcl_resr_get_interfaceLen = nullptr;
151 jmethodID g_mid_OcOicSecAcl_get_rownerID = nullptr;
154 jmethodID g_mid_OcCloudProvisioning_getIP = nullptr;
155 jmethodID g_mid_OcCloudProvisioning_getPort = nullptr;
158 jobject getOcException(JNIEnv* env, const char* file, const char* functionName,
159 const int line, const int code, const char* message)
161 std::string codeStr = JniUtils::stackResultToStr(code);
164 codeStr = JniUtils::stackResultToStr(JNI_INVALID_VALUE);
166 jobject ex = env->NewObject(g_cls_OcException,
167 g_mid_OcException_ctor,
168 env->NewStringUTF(codeStr.c_str()),
169 env->NewStringUTF(message));
174 env->CallVoidMethod(ex,
175 g_mid_OcException_setNativeExceptionLocation,
176 env->NewStringUTF(file),
177 env->NewStringUTF(functionName),
179 if (env->ExceptionCheck())
186 void throwOcException(JNIEnv* env, jobject ex)
188 env->Throw((jthrowable)ex);
192 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
195 JNIEnv* env = nullptr;
198 if (g_jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
200 LOGE("Failed to get the environment using GetEnv()");
203 VERIFY_VARIABLE_NULL(env);
205 jclass clazz = nullptr;
208 clazz = env->FindClass("[B");
209 VERIFY_VARIABLE_NULL(clazz);
210 g_cls_byte1DArray = (jclass)env->NewGlobalRef(clazz);
211 env->DeleteLocalRef(clazz);
213 clazz = env->FindClass("[[B");
214 VERIFY_VARIABLE_NULL(clazz);
215 g_cls_byte2DArray = (jclass)env->NewGlobalRef(clazz);
216 env->DeleteLocalRef(clazz);
218 clazz = env->FindClass("[[[B");
219 VERIFY_VARIABLE_NULL(clazz);
220 g_cls_byte3DArray = (jclass)env->NewGlobalRef(clazz);
221 env->DeleteLocalRef(clazz);
224 clazz = env->FindClass("java/lang/Integer");
225 VERIFY_VARIABLE_NULL(clazz);
227 g_cls_Integer = (jclass)env->NewGlobalRef(clazz);
228 env->DeleteLocalRef(clazz);
230 g_mid_Integer_ctor = env->GetMethodID(g_cls_Integer, "<init>", "(I)V");
231 VERIFY_VARIABLE_NULL(g_mid_Integer_ctor);
233 clazz = env->FindClass("[I");
234 VERIFY_VARIABLE_NULL(clazz);
235 g_cls_int1DArray = (jclass)env->NewGlobalRef(clazz);
236 env->DeleteLocalRef(clazz);
238 clazz = env->FindClass("[[I");
239 VERIFY_VARIABLE_NULL(clazz);
240 g_cls_int2DArray = (jclass)env->NewGlobalRef(clazz);
241 env->DeleteLocalRef(clazz);
244 clazz = env->FindClass("java/lang/Double");
245 VERIFY_VARIABLE_NULL(clazz);
246 g_cls_Double = (jclass)env->NewGlobalRef(clazz);
247 env->DeleteLocalRef(clazz);
249 g_mid_Double_ctor = env->GetMethodID(g_cls_Double, "<init>", "(D)V");
250 VERIFY_VARIABLE_NULL(g_mid_Double_ctor);
252 clazz = env->FindClass("[D");
253 VERIFY_VARIABLE_NULL(clazz);
254 g_cls_double1DArray = (jclass)env->NewGlobalRef(clazz);
255 env->DeleteLocalRef(clazz);
257 clazz = env->FindClass("[[D");
258 VERIFY_VARIABLE_NULL(clazz);
259 g_cls_double2DArray = (jclass)env->NewGlobalRef(clazz);
260 env->DeleteLocalRef(clazz);
263 clazz = env->FindClass("java/lang/Boolean");
264 VERIFY_VARIABLE_NULL(clazz);
265 g_cls_Boolean = (jclass)env->NewGlobalRef(clazz);
266 env->DeleteLocalRef(clazz);
268 g_mid_Boolean_ctor = env->GetMethodID(g_cls_Boolean, "<init>", "(Z)V");
269 VERIFY_VARIABLE_NULL(g_mid_Boolean_ctor);
271 clazz = env->FindClass("[Z");
272 VERIFY_VARIABLE_NULL(clazz);
273 g_cls_boolean1DArray = (jclass)env->NewGlobalRef(clazz);
274 env->DeleteLocalRef(clazz);
276 clazz = env->FindClass("[[Z");
277 VERIFY_VARIABLE_NULL(clazz);
278 g_cls_boolean2DArray = (jclass)env->NewGlobalRef(clazz);
279 env->DeleteLocalRef(clazz);
282 clazz = env->FindClass("java/lang/String");
283 VERIFY_VARIABLE_NULL(clazz);
284 g_cls_String = (jclass)env->NewGlobalRef(clazz);
285 env->DeleteLocalRef(clazz);
287 clazz = env->FindClass("[Ljava/lang/String;");
288 VERIFY_VARIABLE_NULL(clazz);
289 g_cls_String1DArray = (jclass)env->NewGlobalRef(clazz);
290 env->DeleteLocalRef(clazz);
292 clazz = env->FindClass("[[Ljava/lang/String;");
293 VERIFY_VARIABLE_NULL(clazz);
294 g_cls_String2DArray = (jclass)env->NewGlobalRef(clazz);
295 env->DeleteLocalRef(clazz);
298 clazz = env->FindClass("java/util/LinkedList");
299 VERIFY_VARIABLE_NULL(clazz);
300 g_cls_LinkedList = (jclass)env->NewGlobalRef(clazz);
301 env->DeleteLocalRef(clazz);
303 g_mid_LinkedList_ctor = env->GetMethodID(g_cls_LinkedList, "<init>", "()V");
304 VERIFY_VARIABLE_NULL(g_mid_LinkedList_ctor);
306 g_mid_LinkedList_add_object = env->GetMethodID(g_cls_LinkedList, "add", "(Ljava/lang/Object;)Z");
307 VERIFY_VARIABLE_NULL(g_mid_LinkedList_add_object);
310 clazz = env->FindClass("java/util/Map");
311 VERIFY_VARIABLE_NULL(clazz);
312 g_cls_Map = (jclass)env->NewGlobalRef(clazz);
313 env->DeleteLocalRef(clazz);
315 g_mid_Map_entrySet = env->GetMethodID(g_cls_Map, "entrySet", "()Ljava/util/Set;");
316 VERIFY_VARIABLE_NULL(g_mid_Map_entrySet);
319 clazz = env->FindClass("java/util/Map$Entry");
320 VERIFY_VARIABLE_NULL(clazz);
321 g_cls_MapEntry = (jclass)env->NewGlobalRef(clazz);
322 env->DeleteLocalRef(clazz);
324 g_mid_MapEntry_getKey = env->GetMethodID(g_cls_MapEntry, "getKey", "()Ljava/lang/Object;");
325 VERIFY_VARIABLE_NULL(g_mid_MapEntry_getKey);
326 g_mid_MapEntry_getValue = env->GetMethodID(g_cls_MapEntry, "getValue", "()Ljava/lang/Object;");
327 VERIFY_VARIABLE_NULL(g_mid_MapEntry_getValue);
330 clazz = env->FindClass("java/util/Set");
331 VERIFY_VARIABLE_NULL(clazz);
332 g_cls_Set = (jclass)env->NewGlobalRef(clazz);
333 env->DeleteLocalRef(clazz);
335 g_mid_Set_iterator = env->GetMethodID(g_cls_Set, "iterator", "()Ljava/util/Iterator;");
336 VERIFY_VARIABLE_NULL(g_mid_Set_iterator);
339 clazz = env->FindClass("java/util/Iterator");
340 VERIFY_VARIABLE_NULL(clazz);
341 g_cls_Iterator = (jclass)env->NewGlobalRef(clazz);
342 env->DeleteLocalRef(clazz);
344 g_mid_Iterator_hasNext = env->GetMethodID(g_cls_Iterator, "hasNext", "()Z");
345 VERIFY_VARIABLE_NULL(g_mid_Iterator_hasNext);
347 g_mid_Iterator_next = env->GetMethodID(g_cls_Iterator, "next", "()Ljava/lang/Object;");
348 VERIFY_VARIABLE_NULL(g_mid_Iterator_next);
351 clazz = env->FindClass("java/util/HashMap");
352 VERIFY_VARIABLE_NULL(clazz);
353 g_cls_HashMap = (jclass)env->NewGlobalRef(clazz);
354 env->DeleteLocalRef(clazz);
356 g_mid_HashMap_ctor = env->GetMethodID(g_cls_HashMap, "<init>", "()V");
357 VERIFY_VARIABLE_NULL(g_mid_HashMap_ctor);
359 g_mid_HashMap_put = env->GetMethodID(g_cls_HashMap, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
360 VERIFY_VARIABLE_NULL(g_mid_HashMap_put);
363 clazz = env->FindClass("org/iotivity/base/OcException");
364 VERIFY_VARIABLE_NULL(clazz);
365 g_cls_OcException = (jclass)env->NewGlobalRef(clazz);
366 env->DeleteLocalRef(clazz);
368 g_mid_OcException_ctor = env->GetMethodID(g_cls_OcException, "<init>", "(Ljava/lang/String;Ljava/lang/String;)V");
369 VERIFY_VARIABLE_NULL(g_mid_OcException_ctor);
371 g_mid_OcException_setNativeExceptionLocation = env->GetMethodID(g_cls_OcException, "setNativeExceptionLocation",
372 "(Ljava/lang/String;""Ljava/lang/String;""I)V");
373 VERIFY_VARIABLE_NULL(g_mid_OcException_setNativeExceptionLocation);
376 clazz = env->FindClass("org/iotivity/base/OcResource");
377 VERIFY_VARIABLE_NULL(clazz);
378 g_cls_OcResource = (jclass)env->NewGlobalRef(clazz);
379 env->DeleteLocalRef(clazz);
381 g_mid_OcResource_ctor = env->GetMethodID(g_cls_OcResource, "<init>", "(J)V");
382 VERIFY_VARIABLE_NULL(g_mid_OcResource_ctor);
385 clazz = env->FindClass("org/iotivity/base/OcRepresentation");
386 VERIFY_VARIABLE_NULL(clazz);
387 g_cls_OcRepresentation = (jclass)env->NewGlobalRef(clazz);
388 env->DeleteLocalRef(clazz);
390 g_mid_OcRepresentation_N_ctor = env->GetMethodID(g_cls_OcRepresentation, "<init>", "(J)V");
391 VERIFY_VARIABLE_NULL(g_mid_OcRepresentation_N_ctor);
393 g_mid_OcRepresentation_N_ctor_bool = env->GetMethodID(g_cls_OcRepresentation, "<init>", "(JZ)V");
394 VERIFY_VARIABLE_NULL(g_mid_OcRepresentation_N_ctor_bool);
396 clazz = env->FindClass("[Lorg/iotivity/base/OcRepresentation;");
397 VERIFY_VARIABLE_NULL(clazz);
398 g_cls_OcRepresentation1DArray = (jclass)env->NewGlobalRef(clazz);
399 env->DeleteLocalRef(clazz);
401 clazz = env->FindClass("[[Lorg/iotivity/base/OcRepresentation;");
402 VERIFY_VARIABLE_NULL(clazz);
403 g_cls_OcRepresentation2DArray = (jclass)env->NewGlobalRef(clazz);
404 env->DeleteLocalRef(clazz);
407 clazz = env->FindClass("org/iotivity/base/OcHeaderOption");
408 VERIFY_VARIABLE_NULL(clazz);
409 g_cls_OcHeaderOption = (jclass)env->NewGlobalRef(clazz);
410 env->DeleteLocalRef(clazz);
411 g_mid_OcHeaderOption_ctor = env->GetMethodID(g_cls_OcHeaderOption, "<init>", "(ILjava/lang/String;)V");
412 VERIFY_VARIABLE_NULL(g_mid_OcHeaderOption_ctor);
414 g_mid_OcHeaderOption_get_id = env->GetMethodID(g_cls_OcHeaderOption, "getOptionId", "()I");
415 VERIFY_VARIABLE_NULL(g_mid_OcHeaderOption_get_id);
417 g_mid_OcHeaderOption_get_data = env->GetMethodID(g_cls_OcHeaderOption, "getOptionData", "()Ljava/lang/String;");
418 VERIFY_VARIABLE_NULL(g_mid_OcHeaderOption_get_data);
421 clazz = env->FindClass("org/iotivity/base/OcResourceRequest");
422 VERIFY_VARIABLE_NULL(clazz);
423 g_cls_OcResourceRequest = (jclass)env->NewGlobalRef(clazz);
424 env->DeleteLocalRef(clazz);
426 g_mid_OcResourceRequest_N_ctor = env->GetMethodID(g_cls_OcResourceRequest, "<init>", "(J)V");
427 VERIFY_VARIABLE_NULL(g_mid_OcResourceRequest_N_ctor);
430 clazz = env->FindClass("org/iotivity/base/OcResourceResponse");
431 VERIFY_VARIABLE_NULL(clazz);
432 g_cls_OcResourceResponse = (jclass)env->NewGlobalRef(clazz);
433 env->DeleteLocalRef(clazz);
435 g_mid_OcResourceResponse_N_ctor = env->GetMethodID(g_cls_OcResourceResponse, "<init>", "(J)V");
436 VERIFY_VARIABLE_NULL(g_mid_OcResourceResponse_N_ctor);
439 clazz = env->FindClass("org/iotivity/base/OcResourceHandle");
440 VERIFY_VARIABLE_NULL(clazz);
441 g_cls_OcResourceHandle = (jclass)env->NewGlobalRef(clazz);
442 env->DeleteLocalRef(clazz);
443 g_mid_OcResourceHandle_N_ctor = env->GetMethodID(g_cls_OcResourceHandle, "<init>", "(J)V");
444 VERIFY_VARIABLE_NULL(g_mid_OcResourceHandle_N_ctor);
447 clazz = env->FindClass("org/iotivity/base/OcPresenceHandle");
448 VERIFY_VARIABLE_NULL(clazz);
449 g_cls_OcPresenceHandle = (jclass)env->NewGlobalRef(clazz);
450 env->DeleteLocalRef(clazz);
451 g_mid_OcPresenceHandle_N_ctor = env->GetMethodID(g_cls_OcPresenceHandle, "<init>", "(J)V");
452 VERIFY_VARIABLE_NULL(g_mid_OcPresenceHandle_N_ctor);
455 clazz = env->FindClass("org/iotivity/base/OcRequestHandle");
456 VERIFY_VARIABLE_NULL(clazz);
457 g_cls_OcRequestHandle = (jclass)env->NewGlobalRef(clazz);
458 env->DeleteLocalRef(clazz);
459 g_mid_OcRequestHandle_N_ctor = env->GetMethodID(g_cls_OcRequestHandle, "<init>", "(J)V");
460 VERIFY_VARIABLE_NULL(g_mid_OcRequestHandle_N_ctor);
463 clazz = env->FindClass("org/iotivity/base/OcPresenceStatus");
464 VERIFY_VARIABLE_NULL(clazz);
465 g_cls_OcPresenceStatus = (jclass)env->NewGlobalRef(clazz);
466 env->DeleteLocalRef(clazz);
467 g_mid_OcPresenceStatus_get = env->GetStaticMethodID(g_cls_OcPresenceStatus, "get",
468 "(Ljava/lang/String;)Lorg/iotivity/base/OcPresenceStatus;");
469 VERIFY_VARIABLE_NULL(g_mid_OcPresenceStatus_get);
472 clazz = env->FindClass("org/iotivity/base/ObservationInfo");
473 VERIFY_VARIABLE_NULL(clazz);
474 g_cls_ObservationInfo = (jclass)env->NewGlobalRef(clazz);
475 env->DeleteLocalRef(clazz);
476 g_mid_ObservationInfo_N_ctor = env->GetMethodID(g_cls_ObservationInfo, "<init>", "(IB)V");
477 VERIFY_VARIABLE_NULL(g_mid_ObservationInfo_N_ctor);
479 clazz = env->FindClass("org/iotivity/base/OcResourceIdentifier");
480 VERIFY_VARIABLE_NULL(clazz);
481 g_cls_OcResourceIdentifier = (jclass)env->NewGlobalRef(clazz);
482 env->DeleteLocalRef(clazz);
483 g_mid_OcResourceIdentifier_N_ctor = env->GetMethodID(g_cls_OcResourceIdentifier, "<init>", "(J)V");
484 VERIFY_VARIABLE_NULL(g_mid_OcResourceIdentifier_N_ctor);
487 clazz = env->FindClass("org/iotivity/base/OcSecureResource");
488 VERIFY_VARIABLE_NULL(clazz);
489 g_cls_OcSecureResource = (jclass)env->NewGlobalRef(clazz);
490 env->DeleteLocalRef(clazz);
491 g_mid_OcSecureResource_ctor = env->GetMethodID(g_cls_OcSecureResource, "<init>", "(J)V");
492 VERIFY_VARIABLE_NULL(g_mid_OcSecureResource_ctor);
495 clazz = env->FindClass("org/iotivity/base/ProvisionResult");
496 VERIFY_VARIABLE_NULL(clazz);
497 g_cls_OcProvisionResult = (jclass)env->NewGlobalRef(clazz);
498 env->DeleteLocalRef(clazz);
499 g_mid_OcProvisionResult_ctor = env->GetMethodID(g_cls_OcProvisionResult, "<init>", "(Ljava/lang/String;I)V");
500 VERIFY_VARIABLE_NULL(g_mid_OcProvisionResult_ctor);
503 clazz = env->FindClass("org/iotivity/base/OcDirectPairDevice");
504 VERIFY_VARIABLE_NULL(clazz);
505 g_cls_OcDirectPairDevice = (jclass)env->NewGlobalRef(clazz);
506 g_mid_OcDirectPairDevice_ctor = env->GetMethodID(g_cls_OcDirectPairDevice, "<init>", "(J)V");
507 VERIFY_VARIABLE_NULL(g_mid_OcDirectPairDevice_ctor);
509 g_mid_OcDirectPairDevice_dev_ctor = env->GetMethodID(g_cls_OcDirectPairDevice, "<init>", "(Ljava/lang/String;)V");
510 VERIFY_VARIABLE_NULL(g_mid_OcDirectPairDevice_dev_ctor);
511 env->DeleteLocalRef(clazz);
515 clazz = env->FindClass("org/iotivity/base/OcAccountManager");
516 VERIFY_VARIABLE_NULL(clazz);
517 g_cls_OcAccountManager = (jclass)env->NewGlobalRef(clazz);
518 env->DeleteLocalRef(clazz);
520 g_mid_OcAccountManager_ctor = env->GetMethodID(g_cls_OcAccountManager, "<init>", "(J)V");
521 VERIFY_VARIABLE_NULL(g_mid_OcAccountManager_ctor);
525 clazz = env->FindClass("org/iotivity/base/OicSecAcl");
526 VERIFY_VARIABLE_NULL(clazz);
527 g_cls_OcOicSecAcl = (jclass)env->NewGlobalRef(clazz);
528 env->DeleteLocalRef(clazz);
530 g_mid_OcOicSecAcl_get_rownerID = env->GetMethodID(g_cls_OcOicSecAcl, "getRownerID", "()Ljava/lang/String;");
531 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_get_rownerID);
533 g_mid_OcOicSecAcl_get_aces = env->GetMethodID(g_cls_OcOicSecAcl, "getOicSecAces", "()[Lorg/iotivity/base/OicSecAce;");
534 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_get_aces);
537 clazz = env->FindClass("org/iotivity/base/OicSecAce");
538 VERIFY_VARIABLE_NULL(clazz);
539 g_cls_OcOicSecAcl_ace = (jclass)env->NewGlobalRef(clazz);
540 env->DeleteLocalRef(clazz);
542 g_mid_OcOicSecAcl_ace_get_subjectID = env->GetMethodID(g_cls_OcOicSecAcl_ace, "getSubjectID","()Ljava/lang/String;");
543 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_ace_get_subjectID);
545 g_mid_OcOicSecAcl_ace_get_permissions = env->GetMethodID(g_cls_OcOicSecAcl_ace, "getPermission","()I");
546 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_ace_get_permissions);
548 g_mid_OcOicSecAcl_ace_get_resources = env->GetMethodID(g_cls_OcOicSecAcl_ace, "getResources","()[Lorg/iotivity/base/OicSecResr;");
549 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_ace_get_resources);
551 g_mid_OcOicSecAcl_ace_get_validities = env->GetMethodID(g_cls_OcOicSecAcl_ace, "getValidities","()[Lorg/iotivity/base/OicSecValidity;");
552 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_ace_get_validities);
555 clazz = env->FindClass("org/iotivity/base/OicSecResr");
556 VERIFY_VARIABLE_NULL(clazz);
557 g_cls_OcOicSecAcl_resr = (jclass)env->NewGlobalRef(clazz);
558 env->DeleteLocalRef(clazz);
560 g_mid_OcOicSecAcl_resr_get_href = env->GetMethodID(g_cls_OcOicSecAcl_resr, "getHref","()Ljava/lang/String;");
561 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_resr_get_href);
563 g_mid_OcOicSecAcl_resr_get_rel = env->GetMethodID(g_cls_OcOicSecAcl_resr, "getRel","()Ljava/lang/String;");
564 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_resr_get_rel);
566 g_mid_OcOicSecAcl_resr_get_types = env->GetMethodID(g_cls_OcOicSecAcl_resr, "getTypes","(I)Ljava/lang/String;");
567 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_resr_get_types);
569 g_mid_OcOicSecAcl_resr_get_typeLen = env->GetMethodID(g_cls_OcOicSecAcl_resr, "getTypeLen","()I");
570 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_resr_get_typeLen);
572 g_mid_OcOicSecAcl_resr_get_interfaces = env->GetMethodID(g_cls_OcOicSecAcl_resr, "getInterfaces","(I)Ljava/lang/String;");
573 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_resr_get_interfaces);
575 g_mid_OcOicSecAcl_resr_get_interfaceLen = env->GetMethodID(g_cls_OcOicSecAcl_resr, "getInterfaceLen","()I");
576 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_resr_get_interfaceLen);
578 //OicSecAcl$OicSecValidity
579 clazz = env->FindClass("org/iotivity/base/OicSecValidity");
580 VERIFY_VARIABLE_NULL(clazz);
581 g_cls_OcOicSecAcl_validity = (jclass)env->NewGlobalRef(clazz);
582 env->DeleteLocalRef(clazz);
584 g_mid_OcOicSecAcl_validity_get_getPeriod = env->GetMethodID(g_cls_OcOicSecAcl_validity, "getPeriod","()Ljava/lang/String;");
585 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_validity_get_getPeriod);
587 g_mid_OcOicSecAcl_validity_get_recurrences = env->GetMethodID(g_cls_OcOicSecAcl_validity, "getRecurrences","(I)Ljava/lang/String;");
588 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_validity_get_recurrences);
590 g_mid_OcOicSecAcl_validity_get_recurrenceLen = env->GetMethodID(g_cls_OcOicSecAcl_validity, "getRecurrenceLen","()I");
591 VERIFY_VARIABLE_NULL(g_mid_OcOicSecAcl_validity_get_recurrenceLen);
594 clazz = env->FindClass("org/iotivity/base/OicSecPdAcl");
595 VERIFY_VARIABLE_NULL(clazz);
596 g_cls_OcOicSecPdAcl = (jclass)env->NewGlobalRef(clazz);
597 env->DeleteLocalRef(clazz);
599 g_mid_OcOicSecPdAcl_get_resources_cnt = env->GetMethodID(g_cls_OcOicSecPdAcl, "getResourcesCount", "()I");
600 VERIFY_VARIABLE_NULL(g_mid_OcOicSecPdAcl_get_resources_cnt);
602 g_mid_OcOicSecPdAcl_get_resources = env->GetMethodID(g_cls_OcOicSecPdAcl, "getResources", "(I)Ljava/lang/String;");
603 VERIFY_VARIABLE_NULL(g_mid_OcOicSecPdAcl_get_resources);
605 g_mid_OcOicSecPdAcl_get_permission = env->GetMethodID(g_cls_OcOicSecPdAcl, "getPermission", "()I");
606 VERIFY_VARIABLE_NULL(g_mid_OcOicSecPdAcl_get_permission);
608 g_mid_OcOicSecPdAcl_get_periods_cnt = env->GetMethodID(g_cls_OcOicSecPdAcl, "getPeriodsCount", "()I");
609 VERIFY_VARIABLE_NULL(g_mid_OcOicSecPdAcl_get_periods_cnt);
611 g_mid_OcOicSecPdAcl_get_periods = env->GetMethodID(g_cls_OcOicSecPdAcl, "getPeriods", "(I)Ljava/lang/String;");
612 VERIFY_VARIABLE_NULL(g_mid_OcOicSecPdAcl_get_periods);
614 g_mid_OcOicSecPdAcl_get_recurrences = env->GetMethodID(g_cls_OcOicSecPdAcl, "getRecurrences", "(I)Ljava/lang/String;");
615 VERIFY_VARIABLE_NULL(g_mid_OcOicSecPdAcl_get_recurrences);
617 //OcCloudProvisioning
618 clazz = env->FindClass("org/iotivity/base/OcCloudProvisioning");
619 VERIFY_VARIABLE_NULL(clazz);
620 g_cls_OcCloudProvisioning = (jclass)env->NewGlobalRef(clazz);
621 env->DeleteLocalRef(clazz);
623 g_mid_OcCloudProvisioning_getIP = env->GetMethodID(g_cls_OcCloudProvisioning, "getIP", "()Ljava/lang/String;");
624 VERIFY_VARIABLE_NULL(g_mid_OcCloudProvisioning_getIP);
626 g_mid_OcCloudProvisioning_getPort = env->GetMethodID(g_cls_OcCloudProvisioning, "getPort", "()I");
627 VERIFY_VARIABLE_NULL(g_mid_OcCloudProvisioning_getPort);
629 return JNI_CURRENT_VERSION;
632 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved)
634 LOGI("JNI_OnUnload");
635 JNIEnv* env = nullptr;
637 if (vm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
639 LOGE("Failed to get the environment using GetEnv()");
645 env->DeleteGlobalRef(g_cls_Integer);
646 env->DeleteGlobalRef(g_cls_int1DArray);
647 env->DeleteGlobalRef(g_cls_int2DArray);
648 env->DeleteGlobalRef(g_cls_Double);
649 env->DeleteGlobalRef(g_cls_double1DArray);
650 env->DeleteGlobalRef(g_cls_double2DArray);
651 env->DeleteGlobalRef(g_cls_Boolean);
652 env->DeleteGlobalRef(g_cls_boolean1DArray);
653 env->DeleteGlobalRef(g_cls_boolean2DArray);
654 env->DeleteGlobalRef(g_cls_String);
655 env->DeleteGlobalRef(g_cls_String1DArray);
656 env->DeleteGlobalRef(g_cls_String2DArray);
657 env->DeleteGlobalRef(g_cls_LinkedList);
658 env->DeleteGlobalRef(g_cls_Map);
659 env->DeleteGlobalRef(g_cls_MapEntry);
660 env->DeleteGlobalRef(g_cls_Set);
661 env->DeleteGlobalRef(g_cls_Iterator);
662 env->DeleteGlobalRef(g_cls_HashMap);
663 env->DeleteGlobalRef(g_cls_OcResource);
664 env->DeleteGlobalRef(g_cls_OcException);
665 env->DeleteGlobalRef(g_cls_OcRepresentation);
666 env->DeleteGlobalRef(g_cls_OcRepresentation1DArray);
667 env->DeleteGlobalRef(g_cls_OcRepresentation2DArray);
668 env->DeleteGlobalRef(g_cls_OcResourceRequest);
669 env->DeleteGlobalRef(g_cls_OcResourceResponse);
670 env->DeleteGlobalRef(g_cls_OcResourceHandle);
671 env->DeleteGlobalRef(g_cls_OcPresenceHandle);
672 env->DeleteGlobalRef(g_cls_OcRequestHandle);
673 env->DeleteGlobalRef(g_cls_OcPresenceStatus);
674 env->DeleteGlobalRef(g_cls_OcHeaderOption);
675 env->DeleteGlobalRef(g_cls_ObservationInfo);
676 env->DeleteGlobalRef(g_cls_OcResourceIdentifier);
677 env->DeleteGlobalRef(g_cls_OcSecureResource);
678 env->DeleteGlobalRef(g_cls_OcProvisionResult);
679 env->DeleteGlobalRef(g_cls_OcDirectPairDevice);
680 env->DeleteGlobalRef(g_cls_byte1DArray);
681 env->DeleteGlobalRef(g_cls_byte2DArray);
682 env->DeleteGlobalRef(g_cls_byte3DArray);
684 env->DeleteGlobalRef(g_cls_OcAccountManager);
687 env->DeleteGlobalRef(g_cls_OcCloudProvisioning);
689 env->DeleteGlobalRef(g_cls_OcOicSecAcl);
690 env->DeleteGlobalRef(g_cls_OcOicSecAcl_ace);
691 env->DeleteGlobalRef(g_cls_OcOicSecAcl_resr);
692 env->DeleteGlobalRef(g_cls_OcOicSecAcl_validity);