1 /******************************************************************
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 ******************************************************************/
23 #include <android/log.h>
24 #include "caedrutils.h"
26 #include "oic_malloc.h"
27 #include "oic_string.h"
28 #include "cathreadpool.h"
29 #include "uarraylist.h"
31 #define ERROR_CODE (-1)
32 #define TAG PCF("OIC_CA_EDR_UTILS")
34 static const char METHODID_OBJECTNONPARAM[] = "()Landroid/bluetooth/BluetoothAdapter;";
35 static const char METHODID_STRINGNONPARAM[] = "()Ljava/lang/String;";
36 static const char CLASSPATH_BT_ADPATER[] = "android/bluetooth/BluetoothAdapter";
37 static const char CLASSPATH_BT_DEVICE[] = "android/bluetooth/BluetoothDevice";
38 static const char CLASSPATH_BT_SOCKET[] = "android/bluetooth/BluetoothSocket";
40 static u_arraylist_t *g_deviceStateList = NULL;
41 static u_arraylist_t *g_deviceObjectList = NULL;
43 // get address from bluetooth socket
44 jstring CAEDRNativeGetAddressFromDeviceSocket(JNIEnv *env, jobject bluetoothSocketObj)
46 if (!bluetoothSocketObj)
48 OIC_LOG(ERROR, TAG, "bluetoothSocketObj is null");
52 jclass jni_cid_BTSocket = (*env)->FindClass(env, CLASSPATH_BT_SOCKET);
53 if (!jni_cid_BTSocket)
55 OIC_LOG(ERROR, TAG, "jni_cid_BTSocket is null");
59 jmethodID jni_mid_getRemoteDevice = (*env)->GetMethodID(
60 env, jni_cid_BTSocket, "getRemoteDevice", "()Landroid/bluetooth/BluetoothDevice;");
61 if (!jni_mid_getRemoteDevice)
63 OIC_LOG(ERROR, TAG, "jni_mid_getRemoteDevice is null");
64 (*env)->DeleteLocalRef(env, jni_cid_BTSocket);
68 jobject jni_obj_remoteBTDevice = (*env)->CallObjectMethod(env, bluetoothSocketObj,
69 jni_mid_getRemoteDevice);
70 if (!jni_obj_remoteBTDevice)
72 OIC_LOG(ERROR, TAG, "jni_obj_remoteBTDevice is null");
73 (*env)->DeleteLocalRef(env, jni_cid_BTSocket);
77 jclass jni_cid_BTDevice = (*env)->FindClass(env, CLASSPATH_BT_DEVICE);
78 if (!jni_cid_BTDevice)
80 OIC_LOG(ERROR, TAG, "jni_cid_BTDevice is null");
81 (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
82 (*env)->DeleteLocalRef(env, jni_cid_BTSocket);
85 jmethodID j_mid_getAddress = (*env)->GetMethodID(env, jni_cid_BTDevice, "getAddress",
86 METHODID_STRINGNONPARAM);
87 if (!j_mid_getAddress)
89 OIC_LOG(ERROR, TAG, "j_mid_getAddress is null");
90 (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
91 (*env)->DeleteLocalRef(env, jni_cid_BTDevice);
92 (*env)->DeleteLocalRef(env, jni_cid_BTSocket);
96 jstring j_str_address = (*env)->CallObjectMethod(env, jni_obj_remoteBTDevice, j_mid_getAddress);
99 OIC_LOG(ERROR, TAG, "j_str_address is null");
100 (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
101 (*env)->DeleteLocalRef(env, jni_cid_BTDevice);
102 (*env)->DeleteLocalRef(env, jni_cid_BTSocket);
106 (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
107 (*env)->DeleteLocalRef(env, jni_cid_BTDevice);
108 (*env)->DeleteLocalRef(env, jni_cid_BTSocket);
110 return j_str_address;
113 jstring CAEDRNativeGetLocalDeviceAddress(JNIEnv* env)
115 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
116 if (!jni_cid_BTAdapter)
118 OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null");
122 jmethodID jni_mid_getDefaultAdapter = (*env)->GetStaticMethodID(env, jni_cid_BTAdapter,
124 METHODID_OBJECTNONPARAM);
125 if (!jni_mid_getDefaultAdapter)
127 OIC_LOG(ERROR, TAG, "jni_mid_getDefaultAdapter is null");
128 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
132 jmethodID jni_mid_getAddress = (*env)->GetMethodID(env, jni_cid_BTAdapter, "getAddress",
133 METHODID_STRINGNONPARAM);
134 if (!jni_mid_getAddress)
136 OIC_LOG(ERROR, TAG, "jni_mid_getAddress is null");
137 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
141 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter,
142 jni_mid_getDefaultAdapter);
143 if (!jni_obj_BTAdapter)
145 OIC_LOG(ERROR, TAG, "jni_obj_BTAdapter is null");
146 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
150 jstring jni_str_address = (jstring)(*env)->CallObjectMethod(env, jni_obj_BTAdapter,
152 if (!jni_str_address)
154 OIC_LOG(ERROR, TAG, "jni_str_address is null");
155 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
156 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
160 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
161 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
163 return jni_str_address;
166 jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env)
168 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
169 if (!jni_cid_BTAdapter)
171 OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null");
175 jmethodID jni_mid_getDefaultAdapter = (*env)->GetStaticMethodID(env, jni_cid_BTAdapter,
177 METHODID_OBJECTNONPARAM);
178 if (!jni_mid_getDefaultAdapter)
180 OIC_LOG(ERROR, TAG, "default adapter is null");
181 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
185 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter,
186 jni_mid_getDefaultAdapter);
187 if (!jni_obj_BTAdapter)
189 OIC_LOG(ERROR, TAG, "bluetooth adapter is null");
190 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
194 // Get a list of currently paired devices
195 jmethodID jni_mid_getBondedDevices = (*env)->GetMethodID(env, jni_cid_BTAdapter,
197 "()Ljava/util/Set;");
198 if (!jni_mid_getBondedDevices)
200 OIC_LOG(ERROR, TAG, "jni_mid_getBondedDevicesr is null");
201 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
202 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
206 jobject jni_obj_setPairedDevices = (*env)->CallObjectMethod(env, jni_obj_BTAdapter,
207 jni_mid_getBondedDevices);
208 if (!jni_obj_setPairedDevices)
210 OIC_LOG(ERROR, TAG, "ni_obj_setPairedDevices is null");
211 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
212 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
216 // Convert the set to an object array
217 // object[] array = Set<BluetoothDevice>.toArray();
218 jclass jni_cid_Set = (*env)->FindClass(env, "java/util/Set");
221 OIC_LOG(ERROR, TAG, "jni_cid_Set is null");
224 jmethodID jni_mid_toArray = (*env)->GetMethodID(env, jni_cid_Set, "toArray",
225 "()[Ljava/lang/Object;");
227 if (!jni_mid_toArray)
229 OIC_LOG(ERROR, TAG, "jni_mid_toArray is null");
233 jobjectArray jni_arrayPairedDevices = (jobjectArray)(
234 (*env)->CallObjectMethod(env, jni_obj_setPairedDevices, jni_mid_toArray));
235 if (!jni_arrayPairedDevices)
237 OIC_LOG(ERROR, TAG, "jni_arrayPairedDevices is null");
241 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
242 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
243 (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices);
245 return jni_arrayPairedDevices;
248 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
249 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
250 (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices);
254 jint CAEDRNativeGetBTStateOnInfo(JNIEnv *env)
256 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
257 if (!jni_cid_BTAdapter)
259 OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null");
263 jfieldID jni_fid_stateon = (*env)->GetStaticFieldID(env, jni_cid_BTAdapter, "STATE_ON", "I");
264 if (jni_fid_stateon == 0)
266 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
268 OIC_LOG(ERROR, TAG, "get_field_state is 0");
271 jint jni_int_val = (*env)->GetStaticIntField(env, jni_cid_BTAdapter, jni_fid_stateon);
273 OIC_LOG_V(DEBUG, TAG, "bluetooth state integer value : %d", jni_int_val);
275 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
280 jboolean CAEDRNativeIsEnableBTAdapter(JNIEnv *env)
282 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
283 if (!jni_cid_BTAdapter)
285 OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter: jni_cid_BTAdapter is null");
289 jmethodID jni_mid_getDefaultAdapter = (*env)->GetStaticMethodID(env, jni_cid_BTAdapter,
291 METHODID_OBJECTNONPARAM);
292 if (!jni_mid_getDefaultAdapter)
294 OIC_LOG(ERROR, TAG, "jni_mid_getDefaultAdapter is null");
295 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
299 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter,
300 jni_mid_getDefaultAdapter);
301 if (!jni_obj_BTAdapter)
303 OIC_LOG(ERROR, TAG, "jni_obj_BTAdapter is null");
304 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
309 jmethodID jni_mid_isEnable = (*env)->GetMethodID(env, jni_cid_BTAdapter, "isEnabled", "()Z");
310 if (!jni_mid_isEnable)
312 OIC_LOG(ERROR, TAG, "jni_mid_isEnable is null");
313 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
314 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
318 jboolean jni_isEnable = (*env)->CallBooleanMethod(env, jni_obj_BTAdapter, jni_mid_isEnable);
320 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
321 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
326 jstring CAEDRNativeGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice)
328 if (!bluetoothDevice)
330 OIC_LOG(ERROR, TAG, "bluetoothDevice is null");
333 jclass jni_cid_device_list = (*env)->FindClass(env, "android/bluetooth/BluetoothDevice");
334 if (!jni_cid_device_list)
336 OIC_LOG(ERROR, TAG, "jni_cid_device_list is null");
340 jmethodID jni_mid_getAddress = (*env)->GetMethodID(env, jni_cid_device_list, "getAddress",
341 METHODID_STRINGNONPARAM);
342 if (!jni_mid_getAddress)
344 OIC_LOG(ERROR, TAG, "jni_mid_getAddress is null");
348 jstring jni_address = (jstring)(*env)->CallObjectMethod(env, bluetoothDevice,
352 OIC_LOG(ERROR, TAG, "jni_address is null");
361 void CAEDRNativeCreateDeviceStateList()
363 OIC_LOG(DEBUG, TAG, "CAEDRNativeCreateDeviceStateList");
365 // create new object array
366 if (NULL == g_deviceStateList)
368 OIC_LOG(DEBUG, TAG, "Create device list");
370 g_deviceStateList = u_arraylist_create();
374 void CAEDRUpdateDeviceState(CAConnectedState_t state, const char *address)
378 OIC_LOG(ERROR, TAG, "address is null");
381 CAConnectedDeviceInfo_t *deviceInfo =
382 (CAConnectedDeviceInfo_t *) OICCalloc(1, sizeof(CAConnectedDeviceInfo_t));
385 OIC_LOG(ERROR, TAG, "deviceInfo is null");
388 OICStrcpy((char*) deviceInfo->address, sizeof(deviceInfo->address), address);
389 deviceInfo->state = state;
391 CAEDRNativeAddDeviceStateToList(deviceInfo);
394 void CAEDRNativeAddDeviceStateToList(CAConnectedDeviceInfo_t *deviceInfo)
398 OIC_LOG(ERROR, TAG, "device is null");
402 if (!g_deviceStateList)
404 OIC_LOG(ERROR, TAG, "gdevice_list is null");
408 if (CAEDRNativeIsDeviceInList((const char*) deviceInfo->address))
410 // delete previous state for update new state
411 CAEDRNativeRemoveDevice((const char*) deviceInfo->address);
413 u_arraylist_add(g_deviceStateList, deviceInfo); // update new state
414 OIC_LOG_V(DEBUG, TAG, "Set State Info to List : %d", deviceInfo->state);
417 bool CAEDRNativeIsDeviceInList(const char* remoteAddress)
421 OIC_LOG(ERROR, TAG, "remoteAddress is null");
425 jint length = u_arraylist_length(g_deviceStateList);
426 for (jint index = 0; index < length; index++)
428 CAConnectedDeviceInfo_t* deviceInfo =
429 (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
432 OIC_LOG(ERROR, TAG, "deviceInfo object is null");
436 if (!strcmp(remoteAddress, (const char*) deviceInfo->address))
438 OIC_LOG(DEBUG, TAG, "the device is already set");
443 OIC_LOG(DEBUG, TAG, "there are no the device in list.");
447 void CAEDRNativeRemoveAllDeviceState()
449 OIC_LOG(DEBUG, TAG, "CAEDRNativeRemoveAllDevices");
451 if (!g_deviceStateList)
453 OIC_LOG(ERROR, TAG, "gdeviceStateList is null");
458 jint length = u_arraylist_length(g_deviceStateList);
459 for (index = 0; index < length; index++)
461 CAConnectedDeviceInfo_t* deviceInfo =
462 (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
465 OIC_LOG(DEBUG, TAG, "jarrayObj is null");
471 OICFree(g_deviceStateList);
472 g_deviceStateList = NULL;
476 void CAEDRNativeRemoveDevice(const char *remoteAddress)
478 OIC_LOG(DEBUG, TAG, "CAEDRNativeRemoveDeviceforStateList");
480 if (!g_deviceStateList)
482 OIC_LOG(ERROR, TAG, "gdeviceStateList is null");
487 OIC_LOG(ERROR, TAG, "remoteAddress is null");
491 jint length = u_arraylist_length(g_deviceStateList);
492 for (jint index = 0; index < length; index++)
494 CAConnectedDeviceInfo_t* deviceInfo =
495 (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
498 OIC_LOG(DEBUG, TAG, "deviceInfo object is null");
502 if (!strcmp((const char*) deviceInfo->address, remoteAddress))
504 OIC_LOG_V(DEBUG, TAG, "remove state : %s", remoteAddress);
507 u_arraylist_remove(g_deviceStateList, index);
514 CAConnectedState_t CAEDRIsConnectedDevice(const char *remoteAddress)
516 OIC_LOG(DEBUG, TAG, "CAEDRIsConnectedDevice");
520 OIC_LOG(ERROR, TAG, "remoteAddress is null");
521 return STATE_DISCONNECTED;
524 if (!g_deviceStateList)
526 OIC_LOG(ERROR, TAG, "gdeviceStateList is null");
527 return STATE_DISCONNECTED;
530 jint length = u_arraylist_length(g_deviceStateList);
531 for (jint index = 0; index < length; index++)
533 CAConnectedDeviceInfo_t* deviceInfo =
534 (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
537 OIC_LOG(DEBUG, TAG, "deviceInfo object is null");
541 if (!strcmp((const char*) deviceInfo->address, remoteAddress))
543 return deviceInfo->state;
546 return STATE_DISCONNECTED;
550 * Device Socket Object List
552 void CAEDRNativeCreateDeviceSocketList()
554 OIC_LOG(DEBUG, TAG, "CAEDRNativeCreateDeviceSocketList");
556 // create new object array
557 if (NULL == g_deviceObjectList)
559 OIC_LOG(DEBUG, TAG, "Create Device object list");
561 g_deviceObjectList = u_arraylist_create();
565 void CAEDRNativeAddDeviceSocketToList(JNIEnv *env, jobject deviceSocket)
567 OIC_LOG(DEBUG, TAG, "CANativeAddDeviceobjToList");
571 OIC_LOG(ERROR, TAG, "Device is null");
575 if (!g_deviceObjectList)
577 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
581 jstring jni_remoteAddress = CAEDRNativeGetAddressFromDeviceSocket(env, deviceSocket);
582 if (!jni_remoteAddress)
584 OIC_LOG(ERROR, TAG, "jni_remoteAddress is null");
588 const char* remoteAddress = (*env)->GetStringUTFChars(env, jni_remoteAddress, NULL);
590 if (!CAEDRNativeIsDeviceSocketInList(env, remoteAddress))
592 jobject gDeviceSocker = (*env)->NewGlobalRef(env, deviceSocket);
593 u_arraylist_add(g_deviceObjectList, gDeviceSocker);
594 OIC_LOG(DEBUG, TAG, "Set Socket Object to Array");
596 (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress);
597 (*env)->DeleteLocalRef(env, jni_remoteAddress);
600 bool CAEDRNativeIsDeviceSocketInList(JNIEnv *env, const char* remoteAddress)
602 OIC_LOG(DEBUG, TAG, "CANativeIsDeviceObjInList");
606 OIC_LOG(ERROR, TAG, "remoteAddress is null");
610 jint length = u_arraylist_length(g_deviceStateList);
611 for (jint index = 0; index < length; index++)
614 jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index);
617 OIC_LOG(DEBUG, TAG, "jarrayObj is null");
621 jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj);
624 OIC_LOG(DEBUG, TAG, "jni_setAddress is null");
628 const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL);
631 OIC_LOG(DEBUG, TAG, "setAddress is null");
635 if (!strcmp(remoteAddress, setAddress))
637 OIC_LOG(DEBUG, TAG, "the device is already set");
638 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
643 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
648 OIC_LOG(DEBUG, TAG, "there are no the Device obejct in list. we can add");
652 void CAEDRNativeSocketCloseToAll(JNIEnv *env)
654 OIC_LOG(DEBUG, TAG, "CAEDRNativeSocketCloseToAll");
656 if (!g_deviceObjectList)
658 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
662 jclass jni_cid_BTSocket = (*env)->FindClass(env, CLASSPATH_BT_SOCKET);
663 if (!jni_cid_BTSocket)
665 OIC_LOG(ERROR, TAG, "jni_cid_BTSocket is null");
669 jmethodID jni_mid_close = (*env)->GetMethodID(env, jni_cid_BTSocket, "close", "()V");
672 OIC_LOG(ERROR, TAG, "jni_mid_close is null");
676 jint length = u_arraylist_length(g_deviceStateList);
677 for (jint index = 0; index < length; index++)
679 jobject jni_obj_socket = (jobject) u_arraylist_get(g_deviceObjectList, index);
682 OIC_LOG(ERROR, TAG, "socket obj is null");
686 (*env)->CallVoidMethod(env, jni_obj_socket, jni_mid_close);
688 if ((*env)->ExceptionCheck(env))
690 OIC_LOG(ERROR, TAG, "close is Failed!!!");
691 (*env)->ExceptionDescribe(env);
692 (*env)->ExceptionClear(env);
698 void CAEDRNativeRemoveAllDeviceSocket(JNIEnv *env)
700 OIC_LOG(DEBUG, TAG, "CANativeRemoveAllDeviceObjsList");
702 if (!g_deviceObjectList)
704 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
708 jint length = u_arraylist_length(g_deviceStateList);
709 for (jint index = 0; index < length; index++)
711 jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index);
714 OIC_LOG(ERROR, TAG, "jarrayObj is null");
717 (*env)->DeleteGlobalRef(env, jarrayObj);
720 OICFree(g_deviceObjectList);
721 g_deviceObjectList = NULL;
725 void CAEDRNativeRemoveDeviceSocket(JNIEnv *env, jobject deviceSocket)
727 OIC_LOG(DEBUG, TAG, "CAEDRNativeRemoveDeviceSocket");
729 if (!g_deviceObjectList)
731 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
735 jint length = u_arraylist_length(g_deviceStateList);
736 for (jint index = 0; index < length; index++)
738 jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index);
741 OIC_LOG(DEBUG, TAG, "jarrayObj is null");
745 jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj);
748 OIC_LOG(DEBUG, TAG, "jni_setAddress is null");
752 jstring jni_remoteAddress = CAEDRNativeGetAddressFromDeviceSocket(env, deviceSocket);
753 if (!jni_remoteAddress)
755 OIC_LOG(DEBUG, TAG, "jni_remoteAddress is null");
759 const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL);
760 const char* remoteAddress = (*env)->GetStringUTFChars(env, jni_remoteAddress, NULL);
762 if (!strcmp(setAddress, remoteAddress))
764 OIC_LOG_V(DEBUG, TAG, "remove object : %s", remoteAddress);
765 (*env)->DeleteGlobalRef(env, jarrayObj);
766 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
767 (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress);
769 u_arraylist_remove(g_deviceObjectList, index);
772 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
773 (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress);
776 OIC_LOG(DEBUG, TAG, "there are no target object");
780 void CAEDRNativeRemoveDeviceSocketBaseAddr(JNIEnv *env, jstring address)
782 OIC_LOG(DEBUG, TAG, "CAEDRNativeRemoveDeviceSocket");
784 if (!g_deviceObjectList)
786 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
790 jint length = u_arraylist_length(g_deviceStateList);
791 for (jint index = 0; index < length; index++)
793 jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index);
796 OIC_LOG(DEBUG, TAG, "jarrayObj is null");
800 jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj);
803 OIC_LOG(ERROR, TAG, "jni_setAddress is null");
806 const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL);
807 const char* remoteAddress = (*env)->GetStringUTFChars(env, address, NULL);
809 if (!strcmp(setAddress, remoteAddress))
811 OIC_LOG_V(ERROR, TAG, "remove object : %s", remoteAddress);
812 (*env)->DeleteGlobalRef(env, jarrayObj);
813 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
814 (*env)->ReleaseStringUTFChars(env, address, remoteAddress);
816 u_arraylist_remove(g_deviceObjectList, index);
819 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
820 (*env)->ReleaseStringUTFChars(env, address, remoteAddress);
823 OIC_LOG(DEBUG, TAG, "there are no target object");
827 jobject CAEDRNativeGetDeviceSocket(uint32_t idx)
829 if (!g_deviceObjectList)
831 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
835 jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, idx);
838 OIC_LOG(ERROR, TAG, "jarrayObj is not available");
844 jobject CAEDRNativeGetDeviceSocketBaseAddr(JNIEnv *env, const char* remoteAddress)
846 OIC_LOG(DEBUG, TAG, "CAEDRNativeGetDeviceSocket");
848 if (!g_deviceObjectList)
850 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
854 jint length = u_arraylist_length(g_deviceStateList);
855 for (jint index = 0; index < length; index++)
857 jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index);
860 OIC_LOG(ERROR, TAG, "jarrayObj is null");
864 jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj);
867 OIC_LOG(ERROR, TAG, "jni_setAddress is null");
870 const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL);
872 if (!strcmp(setAddress, remoteAddress))
874 OIC_LOG_V(ERROR, TAG, "remove object : %s", remoteAddress);
875 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
876 (*env)->DeleteLocalRef(env, jni_setAddress);
879 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
880 (*env)->DeleteLocalRef(env, jni_setAddress);
886 uint32_t CAEDRGetSocketListLength()
888 if (!g_deviceObjectList)
890 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
894 uint32_t length = u_arraylist_length(g_deviceObjectList);
899 CAConnectedDeviceInfo_t *CAEDRGetDeviceInfoFromAddress(const char *remoteAddress)
901 OIC_LOG(DEBUG, TAG, "CAEDRGetDeviceInfoFromAddress");
903 if (!g_deviceStateList)
905 OIC_LOG(ERROR, TAG, "gdeviceStateList is null");
910 OIC_LOG(ERROR, TAG, "remoteAddress is null");
914 jint length = u_arraylist_length(g_deviceStateList);
915 for (jint index = 0; index < length; index++)
917 CAConnectedDeviceInfo_t* deviceInfo =
918 (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
921 OIC_LOG(DEBUG, TAG, "deviceInfo object is null");
925 if (!strcmp((const char*) deviceInfo->address, remoteAddress))