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"
30 #include "caadapterutils.h"
32 #define ERROR_CODE (-1)
33 #define TAG PCF("OIC_CA_EDR_UTILS")
35 static const char METHODID_OBJECTNONPARAM[] = "()Landroid/bluetooth/BluetoothAdapter;";
36 static const char METHODID_STRINGNONPARAM[] = "()Ljava/lang/String;";
37 static const char CLASSPATH_BT_ADPATER[] = "android/bluetooth/BluetoothAdapter";
38 static const char CLASSPATH_BT_DEVICE[] = "android/bluetooth/BluetoothDevice";
39 static const char CLASSPATH_BT_SOCKET[] = "android/bluetooth/BluetoothSocket";
41 static u_arraylist_t *g_deviceStateList = NULL;
42 static u_arraylist_t *g_deviceObjectList = NULL;
44 // get address from bluetooth socket
45 jstring CAEDRNativeGetAddressFromDeviceSocket(JNIEnv *env, jobject bluetoothSocketObj)
47 VERIFY_NON_NULL_RET(bluetoothSocketObj, TAG, "bluetoothSocketObj", NULL);
49 jmethodID jni_mid_getRemoteDevice = CAGetJNIMethodID(
50 env, CLASSPATH_BT_SOCKET, "getRemoteDevice", "()Landroid/bluetooth/BluetoothDevice;");
51 if (!jni_mid_getRemoteDevice)
53 OIC_LOG(ERROR, TAG, "jni_mid_getRemoteDevice is null");
57 jobject jni_obj_remoteBTDevice = (*env)->CallObjectMethod(env, bluetoothSocketObj,
58 jni_mid_getRemoteDevice);
59 if (!jni_obj_remoteBTDevice)
61 OIC_LOG(ERROR, TAG, "jni_obj_remoteBTDevice is null");
65 jmethodID j_mid_getAddress = CAGetJNIMethodID(env, CLASSPATH_BT_DEVICE,
67 METHODID_STRINGNONPARAM);
68 if (!j_mid_getAddress)
70 OIC_LOG(ERROR, TAG, "j_mid_getAddress is null");
71 (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
75 jstring j_str_address = (*env)->CallObjectMethod(env, jni_obj_remoteBTDevice,
79 OIC_LOG(ERROR, TAG, "j_str_address is null");
80 (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
84 (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
89 jstring CAEDRNativeGetLocalDeviceAddress(JNIEnv* env)
91 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
92 if (!jni_cid_BTAdapter)
94 OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null");
98 jmethodID jni_mid_getDefaultAdapter = (*env)->GetStaticMethodID(env, jni_cid_BTAdapter,
100 METHODID_OBJECTNONPARAM);
101 if (!jni_mid_getDefaultAdapter)
103 OIC_LOG(ERROR, TAG, "jni_mid_getDefaultAdapter is null");
104 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
108 jmethodID jni_mid_getAddress = (*env)->GetMethodID(env, jni_cid_BTAdapter, "getAddress",
109 METHODID_STRINGNONPARAM);
110 if (!jni_mid_getAddress)
112 OIC_LOG(ERROR, TAG, "jni_mid_getAddress is null");
113 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
117 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter,
118 jni_mid_getDefaultAdapter);
119 if (!jni_obj_BTAdapter)
121 OIC_LOG(ERROR, TAG, "jni_obj_BTAdapter is null");
122 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
126 jstring jni_str_address = (jstring)(*env)->CallObjectMethod(env, jni_obj_BTAdapter,
128 if (!jni_str_address)
130 OIC_LOG(ERROR, TAG, "jni_str_address is null");
131 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
132 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
136 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
137 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
139 return jni_str_address;
142 jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env)
144 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
145 if (!jni_cid_BTAdapter)
147 OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null");
151 jmethodID jni_mid_getDefaultAdapter = (*env)->GetStaticMethodID(env, jni_cid_BTAdapter,
153 METHODID_OBJECTNONPARAM);
154 if (!jni_mid_getDefaultAdapter)
156 OIC_LOG(ERROR, TAG, "default adapter is null");
157 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
161 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter,
162 jni_mid_getDefaultAdapter);
163 if (!jni_obj_BTAdapter)
165 OIC_LOG(ERROR, TAG, "bluetooth adapter is null");
166 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
170 // Get a list of currently paired devices
171 jmethodID jni_mid_getBondedDevices = (*env)->GetMethodID(env, jni_cid_BTAdapter,
173 "()Ljava/util/Set;");
174 if (!jni_mid_getBondedDevices)
176 OIC_LOG(ERROR, TAG, "jni_mid_getBondedDevicesr is null");
177 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
178 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
182 jobject jni_obj_setPairedDevices = (*env)->CallObjectMethod(env, jni_obj_BTAdapter,
183 jni_mid_getBondedDevices);
184 if (!jni_obj_setPairedDevices)
186 OIC_LOG(ERROR, TAG, "ni_obj_setPairedDevices is null");
187 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
188 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
192 // Convert the set to an object array
193 // object[] array = Set<BluetoothDevice>.toArray();
194 jmethodID jni_mid_toArray = CAGetJNIMethodID(env, "java/util/Set",
195 "toArray", "()[Ljava/lang/Object;");
196 if (!jni_mid_toArray)
198 OIC_LOG(ERROR, TAG, "jni_mid_toArray is null");
202 jobjectArray jni_arrayPairedDevices = (jobjectArray)(
203 (*env)->CallObjectMethod(env, jni_obj_setPairedDevices, jni_mid_toArray));
204 if (!jni_arrayPairedDevices)
206 OIC_LOG(ERROR, TAG, "jni_arrayPairedDevices is null");
210 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
211 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
212 (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices);
214 return jni_arrayPairedDevices;
217 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
218 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
219 (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices);
223 jint CAEDRNativeGetBTStateOnInfo(JNIEnv *env)
225 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
226 if (!jni_cid_BTAdapter)
228 OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null");
232 jfieldID jni_fid_stateon = (*env)->GetStaticFieldID(env, jni_cid_BTAdapter, "STATE_ON", "I");
233 if (jni_fid_stateon == 0)
235 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
237 OIC_LOG(ERROR, TAG, "get_field_state is 0");
240 jint jni_int_val = (*env)->GetStaticIntField(env, jni_cid_BTAdapter, jni_fid_stateon);
242 OIC_LOG_V(DEBUG, TAG, "bluetooth state integer value : %d", jni_int_val);
244 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
249 jboolean CAEDRNativeIsEnableBTAdapter(JNIEnv *env)
251 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
252 if (!jni_cid_BTAdapter)
254 OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter: jni_cid_BTAdapter is null");
258 jmethodID jni_mid_getDefaultAdapter = (*env)->GetStaticMethodID(env, jni_cid_BTAdapter,
260 METHODID_OBJECTNONPARAM);
261 if (!jni_mid_getDefaultAdapter)
263 OIC_LOG(ERROR, TAG, "jni_mid_getDefaultAdapter is null");
264 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
268 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter,
269 jni_mid_getDefaultAdapter);
270 if (!jni_obj_BTAdapter)
272 OIC_LOG(ERROR, TAG, "jni_obj_BTAdapter is null");
273 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
278 jmethodID jni_mid_isEnable = (*env)->GetMethodID(env, jni_cid_BTAdapter, "isEnabled", "()Z");
279 if (!jni_mid_isEnable)
281 OIC_LOG(ERROR, TAG, "jni_mid_isEnable is null");
282 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
283 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
287 jboolean jni_isEnable = (*env)->CallBooleanMethod(env, jni_obj_BTAdapter, jni_mid_isEnable);
289 (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
290 (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
295 jstring CAEDRNativeGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice)
297 VERIFY_NON_NULL_RET(bluetoothDevice, TAG, "bluetoothDevice", NULL);
299 jmethodID jni_mid_getAddress = CAGetJNIMethodID(env,
302 METHODID_STRINGNONPARAM);
303 if (!jni_mid_getAddress)
305 OIC_LOG(ERROR, TAG, "jni_mid_getAddress is null");
309 jstring jni_address = (jstring)(*env)->CallObjectMethod(env, bluetoothDevice,
313 OIC_LOG(ERROR, TAG, "jni_address is null");
322 void CAEDRNativeCreateDeviceStateList()
324 OIC_LOG(DEBUG, TAG, "CAEDRNativeCreateDeviceStateList");
326 // create new object array
327 if (NULL == g_deviceStateList)
329 OIC_LOG(DEBUG, TAG, "Create device list");
331 g_deviceStateList = u_arraylist_create();
335 void CAEDRUpdateDeviceState(CAConnectedState_t state, const char *address)
337 VERIFY_NON_NULL_VOID(address, TAG, "address");
339 CAConnectedDeviceInfo_t *deviceInfo =
340 (CAConnectedDeviceInfo_t *) OICCalloc(1, sizeof(CAConnectedDeviceInfo_t));
343 OIC_LOG(ERROR, TAG, "deviceInfo is null");
346 OICStrcpy((char*) deviceInfo->address, sizeof(deviceInfo->address), address);
347 deviceInfo->state = state;
349 CAEDRNativeAddDeviceStateToList(deviceInfo);
352 void CAEDRNativeAddDeviceStateToList(CAConnectedDeviceInfo_t *deviceInfo)
354 VERIFY_NON_NULL_VOID(deviceInfo, TAG, "deviceInfo");
356 if (!g_deviceStateList)
358 OIC_LOG(ERROR, TAG, "gdevice_list is null");
362 if (CAEDRNativeIsDeviceInList((const char*) deviceInfo->address))
364 // delete previous state for update new state
365 CAEDRNativeRemoveDevice((const char*) deviceInfo->address);
367 u_arraylist_add(g_deviceStateList, deviceInfo); // update new state
368 OIC_LOG_V(DEBUG, TAG, "add new device state[%d] to list", deviceInfo->state);
371 bool CAEDRNativeIsDeviceInList(const char* remoteAddress)
373 VERIFY_NON_NULL_RET(remoteAddress, TAG, "remoteAddress", false);
375 jint length = u_arraylist_length(g_deviceStateList);
376 for (jint index = 0; index < length; index++)
378 CAConnectedDeviceInfo_t* deviceInfo =
379 (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
382 OIC_LOG(ERROR, TAG, "deviceInfo object is null");
386 if (!strcmp(remoteAddress, (const char*) deviceInfo->address))
388 OIC_LOG(DEBUG, TAG, "the device is already set");
393 OIC_LOG(DEBUG, TAG, "there are no the device in list.");
397 void CAEDRNativeRemoveAllDeviceState()
399 OIC_LOG(DEBUG, TAG, "CAEDRNativeRemoveAllDevices");
401 if (!g_deviceStateList)
403 OIC_LOG(ERROR, TAG, "gdeviceStateList is null");
408 jint length = u_arraylist_length(g_deviceStateList);
409 for (index = 0; index < length; index++)
411 CAConnectedDeviceInfo_t* deviceInfo =
412 (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
415 OIC_LOG(DEBUG, TAG, "jarrayObj is null");
421 OICFree(g_deviceStateList);
422 g_deviceStateList = NULL;
426 void CAEDRNativeRemoveDevice(const char *remoteAddress)
428 OIC_LOG(DEBUG, TAG, "CAEDRNativeRemoveDeviceforStateList");
429 VERIFY_NON_NULL_VOID(remoteAddress, TAG, "remoteAddress");
431 if (!g_deviceStateList)
433 OIC_LOG(ERROR, TAG, "gdeviceStateList is null");
437 jint length = u_arraylist_length(g_deviceStateList);
438 for (jint index = 0; index < length; index++)
440 CAConnectedDeviceInfo_t* deviceInfo =
441 (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
444 OIC_LOG(DEBUG, TAG, "deviceInfo object is null");
448 if (!strcmp((const char*) deviceInfo->address, remoteAddress))
450 OIC_LOG_V(DEBUG, TAG, "remove [%s] info from list", remoteAddress);
453 u_arraylist_remove(g_deviceStateList, index);
460 CAConnectedState_t CAEDRIsConnectedDevice(const char *remoteAddress)
462 OIC_LOG(DEBUG, TAG, "CAEDRIsConnectedDevice");
463 VERIFY_NON_NULL_RET(remoteAddress, TAG, "remoteAddress", STATE_DISCONNECTED);
465 if (!g_deviceStateList)
467 OIC_LOG(ERROR, TAG, "gdeviceStateList is null");
468 return STATE_DISCONNECTED;
471 jint length = u_arraylist_length(g_deviceStateList);
472 for (jint index = 0; index < length; index++)
474 CAConnectedDeviceInfo_t* deviceInfo =
475 (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
478 OIC_LOG(DEBUG, TAG, "deviceInfo object is null");
482 if (!strcmp((const char*) deviceInfo->address, remoteAddress))
484 return deviceInfo->state;
487 return STATE_DISCONNECTED;
491 * Device Socket Object List
493 void CAEDRNativeCreateDeviceSocketList()
495 OIC_LOG(DEBUG, TAG, "CAEDRNativeCreateDeviceSocketList");
497 // create new object array
498 if (NULL == g_deviceObjectList)
500 OIC_LOG(DEBUG, TAG, "Create Device object list");
502 g_deviceObjectList = u_arraylist_create();
506 void CAEDRNativeAddDeviceSocketToList(JNIEnv *env, jobject deviceSocket)
508 OIC_LOG(DEBUG, TAG, "CANativeAddDeviceobjToList");
509 VERIFY_NON_NULL_VOID(deviceSocket, TAG, "deviceSocket");
511 if (!g_deviceObjectList)
513 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
517 jstring jni_remoteAddress = CAEDRNativeGetAddressFromDeviceSocket(env, deviceSocket);
518 if (!jni_remoteAddress)
520 OIC_LOG(ERROR, TAG, "jni_remoteAddress is null");
524 const char* remoteAddress = (*env)->GetStringUTFChars(env, jni_remoteAddress, NULL);
526 if (CAEDRNativeIsDeviceSocketInList(env, remoteAddress))
528 OIC_LOG(DEBUG, TAG, "the address exists in deviceObjectList. remove it to add new");
529 CAEDRNativeRemoveDeviceSocketBaseAddr(env, jni_remoteAddress);
532 (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress);
533 (*env)->DeleteLocalRef(env, jni_remoteAddress);
535 CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) OICCalloc(1, sizeof(*socketInfo));
538 OIC_LOG(ERROR, TAG, "Out of memory");
542 jmethodID jni_mid_getInputStream = CAGetJNIMethodID(env, "android/bluetooth/BluetoothSocket",
544 "()Ljava/io/InputStream;");
545 if (!jni_mid_getInputStream)
547 OIC_LOG(ERROR, TAG, "jni_mid_getInputStream is null");
551 jobject jni_obj_inputStream = (*env)->CallObjectMethod(env, deviceSocket,
552 jni_mid_getInputStream);
553 if (!jni_obj_inputStream)
555 OIC_LOG(ERROR, TAG, "jni_obj_inputStream is null");
559 socketInfo->deviceSocket = (*env)->NewGlobalRef(env, deviceSocket);
560 socketInfo->inputStream = (*env)->NewGlobalRef(env, jni_obj_inputStream);
561 (*env)->DeleteLocalRef(env, jni_obj_inputStream);
563 bool result = u_arraylist_add(g_deviceObjectList, (void *) socketInfo);
566 OIC_LOG(ERROR, TAG, "u_arraylist_add failed.");
571 OIC_LOG(DEBUG, TAG, "add new device socket object to list");
574 bool CAEDRNativeIsDeviceSocketInList(JNIEnv *env, const char* remoteAddress)
576 OIC_LOG(DEBUG, TAG, "CANativeIsDeviceObjInList");
577 VERIFY_NON_NULL_RET(remoteAddress, TAG, "remoteAddress", false);
579 jint length = u_arraylist_length(g_deviceObjectList);
580 for (jint index = 0; index < length; index++)
582 CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) u_arraylist_get(g_deviceObjectList,
586 OIC_LOG(DEBUG, TAG, "socketInfo is null");
590 jobject jarrayObj = socketInfo->deviceSocket;
593 OIC_LOG(DEBUG, TAG, "jarrayObj is null");
597 jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj);
600 OIC_LOG(DEBUG, TAG, "jni_setAddress is null");
604 const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL);
607 OIC_LOG(DEBUG, TAG, "setAddress is null");
611 if (!strcmp(remoteAddress, setAddress))
613 OIC_LOG(DEBUG, TAG, "the device is already set");
614 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
619 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
624 OIC_LOG(DEBUG, TAG, "there are no the Device obejct in list");
628 void CAEDRNativeSocketCloseToAll(JNIEnv *env)
630 OIC_LOG(DEBUG, TAG, "CAEDRNativeSocketCloseToAll");
632 if (!g_deviceObjectList)
634 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
638 jmethodID jni_mid_close = CAGetJNIMethodID(env, CLASSPATH_BT_SOCKET,
642 OIC_LOG(ERROR, TAG, "jni_mid_close is null");
646 jint length = u_arraylist_length(g_deviceObjectList);
647 for (jint index = 0; index < length; index++)
649 jobject jni_obj_socket = (jobject) u_arraylist_get(g_deviceObjectList, index);
652 OIC_LOG(ERROR, TAG, "socket obj is null");
656 (*env)->CallVoidMethod(env, jni_obj_socket, jni_mid_close);
658 if ((*env)->ExceptionCheck(env))
660 OIC_LOG(ERROR, TAG, "close is Failed!!!");
661 (*env)->ExceptionDescribe(env);
662 (*env)->ExceptionClear(env);
668 void CAEDRNativeRemoveAllDeviceSocket(JNIEnv *env)
670 OIC_LOG(DEBUG, TAG, "CANativeRemoveAllDeviceObjsList");
672 if (!g_deviceObjectList)
674 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
678 jint length = u_arraylist_length(g_deviceObjectList);
679 for (jint index = 0; index < length; index++)
681 CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) u_arraylist_get(g_deviceObjectList,
685 OIC_LOG(ERROR, TAG, "socketInfo is null");
689 jobject jdeviceSocket = socketInfo->deviceSocket;
692 (*env)->DeleteGlobalRef(env, jdeviceSocket);
695 jobject jinputStream = socketInfo->inputStream;
698 (*env)->DeleteGlobalRef(env, jinputStream);
702 OICFree(g_deviceObjectList);
703 g_deviceObjectList = NULL;
707 void CAEDRNativeRemoveDeviceSocket(JNIEnv *env, jobject deviceSocket)
709 OIC_LOG(DEBUG, TAG, "CAEDRNativeRemoveDeviceSocket");
710 VERIFY_NON_NULL_VOID(deviceSocket, TAG, "deviceSocket");
712 jstring jni_address = CAEDRNativeGetAddressFromDeviceSocket(env, deviceSocket);
715 OIC_LOG(ERROR, TAG, "jni_address is null");
719 CAEDRNativeRemoveDeviceSocketBaseAddr(env, jni_address);
724 void CAEDRNativeRemoveDeviceSocketBaseAddr(JNIEnv *env, jstring address)
726 OIC_LOG(DEBUG, TAG, "CAEDRNativeRemoveDeviceSocketBaseAddr");
727 VERIFY_NON_NULL_VOID(address, TAG, "address");
729 if (!g_deviceObjectList)
731 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
735 const char* targetAddress = (*env)->GetStringUTFChars(env, address, NULL);
737 jint length = u_arraylist_length(g_deviceObjectList);
738 for (jint index = 0; index < length; index++)
740 CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) u_arraylist_get(g_deviceObjectList,
744 OIC_LOG(ERROR, TAG, "socketInfo is null");
748 jobject jarrayObj = socketInfo->deviceSocket;
751 OIC_LOG(DEBUG, TAG, "jarrayObj is null");
755 jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj);
758 OIC_LOG(ERROR, TAG, "jni_setAddress is null");
762 const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL);
764 if (!strcmp(setAddress, targetAddress))
766 OIC_LOG_V(DEBUG, TAG, "remove object : %s", targetAddress);
767 (*env)->DeleteGlobalRef(env, jarrayObj);
768 jobject jinputStream = socketInfo->inputStream;
771 (*env)->DeleteGlobalRef(env, jinputStream);
773 (*env)->ReleaseStringUTFChars(env, address, targetAddress);
774 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
775 (*env)->DeleteLocalRef(env, jni_setAddress);
777 u_arraylist_remove(g_deviceObjectList, index);
780 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
781 (*env)->DeleteLocalRef(env, jni_setAddress);
784 OIC_LOG_V(DEBUG, TAG, "the target object doesn't exist in deviceObjectList (addr: %s)",
786 (*env)->ReleaseStringUTFChars(env, address, targetAddress);
791 jobject CAEDRNativeGetDeviceSocket(uint32_t index)
793 if (!g_deviceObjectList)
795 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
799 CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) u_arraylist_get(g_deviceObjectList,
803 OIC_LOG(ERROR, TAG, "socketInfo is null");
807 jobject jarrayObj = socketInfo->deviceSocket;
810 OIC_LOG(ERROR, TAG, "jarrayObj is not available");
816 jobject CAEDRNativeGetDeviceSocketBaseAddr(JNIEnv *env, const char* remoteAddress)
818 OIC_LOG(DEBUG, TAG, "CAEDRNativeGetDeviceSocketBaseAddr");
819 VERIFY_NON_NULL_RET(remoteAddress, TAG, "remoteAddress", NULL);
821 if (!g_deviceObjectList)
823 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
827 jint length = u_arraylist_length(g_deviceObjectList);
828 for (jint index = 0; index < length; index++)
830 CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) u_arraylist_get(g_deviceObjectList,
834 OIC_LOG(ERROR, TAG, "socketInfo is null");
838 jobject jarrayObj = socketInfo->deviceSocket;
841 OIC_LOG(ERROR, TAG, "jarrayObj is null");
845 jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj);
848 OIC_LOG(ERROR, TAG, "jni_setAddress is null");
851 const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL);
853 if (!strcmp(setAddress, remoteAddress))
855 OIC_LOG_V(ERROR, TAG, "remove object : %s", remoteAddress);
856 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
857 (*env)->DeleteLocalRef(env, jni_setAddress);
860 (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
861 (*env)->DeleteLocalRef(env, jni_setAddress);
867 jobject CAEDRNativeGetInputStream(uint32_t index)
869 if (!g_deviceObjectList)
871 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
875 CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) u_arraylist_get(g_deviceObjectList,
879 OIC_LOG(ERROR, TAG, "socketInfo is null");
883 jobject jarrayObj = socketInfo->inputStream;
886 OIC_LOG(ERROR, TAG, "jarrayObj is not available");
892 uint32_t CAEDRGetSocketListLength()
894 if (!g_deviceObjectList)
896 OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
900 return u_arraylist_length(g_deviceObjectList);
903 CAConnectedDeviceInfo_t *CAEDRGetDeviceInfoFromAddress(const char *remoteAddress)
905 OIC_LOG(DEBUG, TAG, "CAEDRGetDeviceInfoFromAddress");
906 VERIFY_NON_NULL_RET(remoteAddress, TAG, "remoteAddress", NULL);
908 if (!g_deviceStateList)
910 OIC_LOG(ERROR, TAG, "gdeviceStateList 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))