X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fconnectivity%2Fsrc%2Fbt_edr_adapter%2Fandroid%2Fcaedrutils.c;h=5990dc1c44669b0d807885c025f58f8d1a790259;hb=8229635f6d207516ccbbdf23b13be164e0fc1787;hp=cbd1fb80107a93b7fe0ff24551cad3a7d5aff049;hpb=c48947491784387cfb57b6dbd7cdc5ced803c6bc;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/connectivity/src/bt_edr_adapter/android/caedrutils.c b/resource/csdk/connectivity/src/bt_edr_adapter/android/caedrutils.c index cbd1fb8..5990dc1 100644 --- a/resource/csdk/connectivity/src/bt_edr_adapter/android/caedrutils.c +++ b/resource/csdk/connectivity/src/bt_edr_adapter/android/caedrutils.c @@ -27,9 +27,10 @@ #include "oic_string.h" #include "cathreadpool.h" #include "uarraylist.h" +#include "caadapterutils.h" #define ERROR_CODE (-1) -#define TAG PCF("CA_EDR_UTILS") +#define TAG PCF("OIC_CA_EDR_UTILS") static const char METHODID_OBJECTNONPARAM[] = "()Landroid/bluetooth/BluetoothAdapter;"; static const char METHODID_STRINGNONPARAM[] = "()Ljava/lang/String;"; @@ -43,26 +44,13 @@ static u_arraylist_t *g_deviceObjectList = NULL; // get address from bluetooth socket jstring CAEDRNativeGetAddressFromDeviceSocket(JNIEnv *env, jobject bluetoothSocketObj) { - if (!bluetoothSocketObj) - { - OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: bluetoothSocketObj is null"); - return NULL; - } - - jclass jni_cid_BTSocket = (*env)->FindClass(env, CLASSPATH_BT_SOCKET); - if (!jni_cid_BTSocket) - { - OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: jni_cid_BTSocket is null"); - return NULL; - } + VERIFY_NON_NULL_RET(bluetoothSocketObj, TAG, "bluetoothSocketObj", NULL); - jmethodID jni_mid_getRemoteDevice = (*env)->GetMethodID( - env, jni_cid_BTSocket, "getRemoteDevice", "()Landroid/bluetooth/BluetoothDevice;"); + jmethodID jni_mid_getRemoteDevice = CAGetJNIMethodID( + env, CLASSPATH_BT_SOCKET, "getRemoteDevice", "()Landroid/bluetooth/BluetoothDevice;"); if (!jni_mid_getRemoteDevice) { - (*env)->DeleteLocalRef(env, jni_cid_BTSocket); - - OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: jni_mid_getRemoteDevice is null"); + OIC_LOG(ERROR, TAG, "jni_mid_getRemoteDevice is null"); return NULL; } @@ -70,47 +58,30 @@ jstring CAEDRNativeGetAddressFromDeviceSocket(JNIEnv *env, jobject bluetoothSock jni_mid_getRemoteDevice); if (!jni_obj_remoteBTDevice) { - (*env)->DeleteLocalRef(env, jni_cid_BTSocket); - - OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: jni_obj_remoteBTDevice is null"); + OIC_LOG(ERROR, TAG, "jni_obj_remoteBTDevice is null"); return NULL; } - jclass jni_cid_BTDevice = (*env)->FindClass(env, CLASSPATH_BT_DEVICE); - if (!jni_cid_BTDevice) - { - (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice); - (*env)->DeleteLocalRef(env, jni_cid_BTSocket); - - OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: jni_cid_BTDevice is null"); - return NULL; - } - jmethodID j_mid_getAddress = (*env)->GetMethodID(env, jni_cid_BTDevice, "getAddress", - METHODID_STRINGNONPARAM); + jmethodID j_mid_getAddress = CAGetJNIMethodID(env, CLASSPATH_BT_DEVICE, + "getAddress", + METHODID_STRINGNONPARAM); if (!j_mid_getAddress) { + OIC_LOG(ERROR, TAG, "j_mid_getAddress is null"); (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice); - (*env)->DeleteLocalRef(env, jni_cid_BTDevice); - (*env)->DeleteLocalRef(env, jni_cid_BTSocket); - - OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: j_mid_getAddress is null"); return NULL; } - jstring j_str_address = (*env)->CallObjectMethod(env, jni_obj_remoteBTDevice, j_mid_getAddress); + jstring j_str_address = (*env)->CallObjectMethod(env, jni_obj_remoteBTDevice, + j_mid_getAddress); if (!j_str_address) { + OIC_LOG(ERROR, TAG, "j_str_address is null"); (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice); - (*env)->DeleteLocalRef(env, jni_cid_BTDevice); - (*env)->DeleteLocalRef(env, jni_cid_BTSocket); - - OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: j_str_address is null"); return NULL; } (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice); - (*env)->DeleteLocalRef(env, jni_cid_BTDevice); - (*env)->DeleteLocalRef(env, jni_cid_BTSocket); return j_str_address; } @@ -120,7 +91,7 @@ jstring CAEDRNativeGetLocalDeviceAddress(JNIEnv* env) jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER); if (!jni_cid_BTAdapter) { - OIC_LOG(ERROR, TAG, "[EDR][Native] getAddress: jni_cid_BTAdapter is null"); + OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null"); return NULL; } @@ -129,9 +100,8 @@ jstring CAEDRNativeGetLocalDeviceAddress(JNIEnv* env) METHODID_OBJECTNONPARAM); if (!jni_mid_getDefaultAdapter) { + OIC_LOG(ERROR, TAG, "jni_mid_getDefaultAdapter is null"); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] getAddress: jni_mid_getDefaultAdapter is null"); return NULL; } @@ -139,9 +109,8 @@ jstring CAEDRNativeGetLocalDeviceAddress(JNIEnv* env) METHODID_STRINGNONPARAM); if (!jni_mid_getAddress) { + OIC_LOG(ERROR, TAG, "jni_mid_getAddress is null"); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] getAddress: jni_mid_getAddress is null"); return NULL; } @@ -149,9 +118,8 @@ jstring CAEDRNativeGetLocalDeviceAddress(JNIEnv* env) jni_mid_getDefaultAdapter); if (!jni_obj_BTAdapter) { + OIC_LOG(ERROR, TAG, "jni_obj_BTAdapter is null"); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] getAddress: jni_obj_BTAdapter is null"); return NULL; } @@ -159,10 +127,9 @@ jstring CAEDRNativeGetLocalDeviceAddress(JNIEnv* env) jni_mid_getAddress); if (!jni_str_address) { + OIC_LOG(ERROR, TAG, "jni_str_address is null"); (*env)->DeleteLocalRef(env, jni_obj_BTAdapter); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] getAddress: jni_str_address is null"); return NULL; } @@ -177,7 +144,7 @@ jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env) jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER); if (!jni_cid_BTAdapter) { - OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: jni_cid_BTAdapter is null"); + OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null"); return NULL; } @@ -186,9 +153,8 @@ jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env) METHODID_OBJECTNONPARAM); if (!jni_mid_getDefaultAdapter) { + OIC_LOG(ERROR, TAG, "default adapter is null"); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: default adapter is null"); return NULL; } @@ -196,9 +162,8 @@ jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env) jni_mid_getDefaultAdapter); if (!jni_obj_BTAdapter) { + OIC_LOG(ERROR, TAG, "bluetooth adapter is null"); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: bluetooth adapter is null"); return NULL; } @@ -208,10 +173,9 @@ jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env) "()Ljava/util/Set;"); if (!jni_mid_getBondedDevices) { + OIC_LOG(ERROR, TAG, "jni_mid_getBondedDevicesr is null"); (*env)->DeleteLocalRef(env, jni_obj_BTAdapter); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: jni_mid_getBondedDevicesr is null"); return NULL; } @@ -219,51 +183,41 @@ jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env) jni_mid_getBondedDevices); if (!jni_obj_setPairedDevices) { + OIC_LOG(ERROR, TAG, "ni_obj_setPairedDevices is null"); (*env)->DeleteLocalRef(env, jni_obj_BTAdapter); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: jni_obj_setPairedDevices is null"); return NULL; } // Convert the set to an object array // object[] array = Set.toArray(); - jclass jni_cid_Set = (*env)->FindClass(env, "java/util/Set"); - if (!jni_cid_Set) - { - (*env)->DeleteLocalRef(env, jni_obj_BTAdapter); - (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: jni_cid_Set is null"); - return NULL; - } - jmethodID jni_mid_toArray = (*env)->GetMethodID(env, jni_cid_Set, "toArray", - "()[Ljava/lang/Object;"); - + jmethodID jni_mid_toArray = CAGetJNIMethodID(env, "java/util/Set", + "toArray", "()[Ljava/lang/Object;"); if (!jni_mid_toArray) { - (*env)->DeleteLocalRef(env, jni_obj_BTAdapter); - (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: jni_mid_toArray is null"); - return NULL; + OIC_LOG(ERROR, TAG, "jni_mid_toArray is null"); + goto exit; } jobjectArray jni_arrayPairedDevices = (jobjectArray)( (*env)->CallObjectMethod(env, jni_obj_setPairedDevices, jni_mid_toArray)); if (!jni_arrayPairedDevices) { - (*env)->DeleteLocalRef(env, jni_obj_BTAdapter); - (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: jni_arrayPairedDevices is null"); - return NULL; + OIC_LOG(ERROR, TAG, "jni_arrayPairedDevices is null"); + goto exit; } (*env)->DeleteLocalRef(env, jni_obj_BTAdapter); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); + (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices); return jni_arrayPairedDevices; + +exit: + (*env)->DeleteLocalRef(env, jni_obj_BTAdapter); + (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); + (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices); + return NULL; } jint CAEDRNativeGetBTStateOnInfo(JNIEnv *env) @@ -271,7 +225,7 @@ jint CAEDRNativeGetBTStateOnInfo(JNIEnv *env) jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER); if (!jni_cid_BTAdapter) { - OIC_LOG(ERROR, TAG, "[EDR][Native] getBTStateOnInfo: jni_cid_BTAdapter is null"); + OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null"); return ERROR_CODE; } @@ -280,12 +234,12 @@ jint CAEDRNativeGetBTStateOnInfo(JNIEnv *env) { (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - OIC_LOG(ERROR, TAG, "[EDR][Native] get_field_state is 0"); + OIC_LOG(ERROR, TAG, "get_field_state is 0"); return ERROR_CODE; } jint jni_int_val = (*env)->GetStaticIntField(env, jni_cid_BTAdapter, jni_fid_stateon); - OIC_LOG_V(DEBUG, TAG, "[EDR][Native] bluetooth state integer value : %d", jni_int_val); + OIC_LOG_V(DEBUG, TAG, "bluetooth state integer value : %d", jni_int_val); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); @@ -297,7 +251,7 @@ jboolean CAEDRNativeIsEnableBTAdapter(JNIEnv *env) jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER); if (!jni_cid_BTAdapter) { - OIC_LOG(ERROR, TAG, "[EDR][Native] jni_cid_BTAdapter: jni_cid_BTAdapter is null"); + OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter: jni_cid_BTAdapter is null"); return JNI_FALSE; } @@ -306,9 +260,8 @@ jboolean CAEDRNativeIsEnableBTAdapter(JNIEnv *env) METHODID_OBJECTNONPARAM); if (!jni_mid_getDefaultAdapter) { + OIC_LOG(ERROR, TAG, "jni_mid_getDefaultAdapter is null"); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] jni_mid_getDefaultAdapter is null"); return JNI_FALSE; } @@ -316,9 +269,8 @@ jboolean CAEDRNativeIsEnableBTAdapter(JNIEnv *env) jni_mid_getDefaultAdapter); if (!jni_obj_BTAdapter) { + OIC_LOG(ERROR, TAG, "jni_obj_BTAdapter is null"); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] jni_obj_BTAdapter is null"); return JNI_FALSE; } @@ -326,15 +278,13 @@ jboolean CAEDRNativeIsEnableBTAdapter(JNIEnv *env) jmethodID jni_mid_isEnable = (*env)->GetMethodID(env, jni_cid_BTAdapter, "isEnabled", "()Z"); if (!jni_mid_isEnable) { + OIC_LOG(ERROR, TAG, "jni_mid_isEnable is null"); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); (*env)->DeleteLocalRef(env, jni_obj_BTAdapter); - - OIC_LOG(ERROR, TAG, "[EDR][Native] jni_mid_isEnable is null"); return JNI_FALSE; } jboolean jni_isEnable = (*env)->CallBooleanMethod(env, jni_obj_BTAdapter, jni_mid_isEnable); - OIC_LOG_V(DEBUG, TAG, "[EDR][Native] adapter state is %d", jni_isEnable); (*env)->DeleteLocalRef(env, jni_obj_BTAdapter); (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); @@ -344,23 +294,15 @@ jboolean CAEDRNativeIsEnableBTAdapter(JNIEnv *env) jstring CAEDRNativeGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice) { - if (!bluetoothDevice) - { - OIC_LOG(ERROR, TAG, "[EDR][Native] bluetoothDevice is null"); - return NULL; - } - jclass jni_cid_device_list = (*env)->FindClass(env, "android/bluetooth/BluetoothDevice"); - if (!jni_cid_device_list) - { - OIC_LOG(ERROR, TAG, "[EDR][Native] jni_cid_device_list is null"); - return NULL; - } + VERIFY_NON_NULL_RET(bluetoothDevice, TAG, "bluetoothDevice", NULL); - jmethodID jni_mid_getAddress = (*env)->GetMethodID(env, jni_cid_device_list, "getAddress", - METHODID_STRINGNONPARAM); + jmethodID jni_mid_getAddress = CAGetJNIMethodID(env, + CLASSPATH_BT_DEVICE, + "getAddress", + METHODID_STRINGNONPARAM); if (!jni_mid_getAddress) { - OIC_LOG(ERROR, TAG, "[EDR][Native] jni_mid_getAddress is null"); + OIC_LOG(ERROR, TAG, "jni_mid_getAddress is null"); return NULL; } @@ -368,7 +310,7 @@ jstring CAEDRNativeGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice) jni_mid_getAddress); if (!jni_address) { - OIC_LOG(ERROR, TAG, "[EDR][Native] jni_address is null"); + OIC_LOG(ERROR, TAG, "jni_address is null"); return NULL; } return jni_address; @@ -379,7 +321,7 @@ jstring CAEDRNativeGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice) */ void CAEDRNativeCreateDeviceStateList() { - OIC_LOG(DEBUG, TAG, "[EDR][Native] CAEDRNativeCreateDeviceStateList"); + OIC_LOG(DEBUG, TAG, "CAEDRNativeCreateDeviceStateList"); // create new object array if (NULL == g_deviceStateList) @@ -392,74 +334,60 @@ void CAEDRNativeCreateDeviceStateList() void CAEDRUpdateDeviceState(CAConnectedState_t state, const char *address) { - if (!address) - { - OIC_LOG(ERROR, TAG, "[EDR][Native] address is null"); - return; - } - state_t *newstate = (state_t*) OICCalloc(1, sizeof(state_t)); - if (!newstate) + VERIFY_NON_NULL_VOID(address, TAG, "address"); + + CAConnectedDeviceInfo_t *deviceInfo = + (CAConnectedDeviceInfo_t *) OICCalloc(1, sizeof(CAConnectedDeviceInfo_t)); + if (!deviceInfo) { - OIC_LOG(ERROR, TAG, "[EDR][Native] newstate is null"); + OIC_LOG(ERROR, TAG, "deviceInfo is null"); return; } - OICStrcpy((char*) newstate->address, sizeof(newstate->address), address); - newstate->state = state; + OICStrcpy((char*) deviceInfo->address, sizeof(deviceInfo->address), address); + deviceInfo->state = state; - CAEDRNativeAddDeviceStateToList(newstate); + CAEDRNativeAddDeviceStateToList(deviceInfo); } -void CAEDRNativeAddDeviceStateToList(state_t *state) +void CAEDRNativeAddDeviceStateToList(CAConnectedDeviceInfo_t *deviceInfo) { - if (!state) - { - OIC_LOG(ERROR, TAG, "[EDR][Native] device is null"); - return; - } + VERIFY_NON_NULL_VOID(deviceInfo, TAG, "deviceInfo"); if (!g_deviceStateList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdevice_list is null"); + OIC_LOG(ERROR, TAG, "gdevice_list is null"); return; } - if (CAEDRNativeIsDeviceInList((const char*) state->address)) + if (CAEDRNativeIsDeviceInList((const char*) deviceInfo->address)) { // delete previous state for update new state - CAEDRNativeRemoveDevice((const char*) state->address); + CAEDRNativeRemoveDevice((const char*) deviceInfo->address); } - u_arraylist_add(g_deviceStateList, state); // update new state - OIC_LOG_V(DEBUG, TAG, "Set State Info to List : %d", state->state); + u_arraylist_add(g_deviceStateList, deviceInfo); // update new state + OIC_LOG_V(DEBUG, TAG, "add new device state[%d] to list", deviceInfo->state); } bool CAEDRNativeIsDeviceInList(const char* remoteAddress) { + VERIFY_NON_NULL_RET(remoteAddress, TAG, "remoteAddress", false); - if (!remoteAddress) - { - OIC_LOG(ERROR, TAG, "[EDR][Native] remoteAddress is null"); - return false; - } - jint index; jint length = u_arraylist_length(g_deviceStateList); - for (index = 0; index < length; index++) + for (jint index = 0; index < length; index++) { - state_t* state = (state_t*) u_arraylist_get(g_deviceStateList, index); - if (!state) + CAConnectedDeviceInfo_t* deviceInfo = + (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index); + if (!deviceInfo) { - OIC_LOG(ERROR, TAG, "[EDR][Native] state_t object is null"); + OIC_LOG(ERROR, TAG, "deviceInfo object is null"); return false; } - if (!strcmp(remoteAddress, (const char*) state->address)) + if (!strcmp(remoteAddress, (const char*) deviceInfo->address)) { OIC_LOG(DEBUG, TAG, "the device is already set"); return true; } - else - { - continue; - } } OIC_LOG(DEBUG, TAG, "there are no the device in list."); @@ -472,7 +400,7 @@ void CAEDRNativeRemoveAllDeviceState() if (!g_deviceStateList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceStateList is null"); + OIC_LOG(ERROR, TAG, "gdeviceStateList is null"); return; } @@ -480,13 +408,14 @@ void CAEDRNativeRemoveAllDeviceState() jint length = u_arraylist_length(g_deviceStateList); for (index = 0; index < length; index++) { - state_t* state = (state_t*) u_arraylist_get(g_deviceStateList, index); - if (!state) + CAConnectedDeviceInfo_t* deviceInfo = + (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index); + if (!deviceInfo) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] jarrayObj is null"); + OIC_LOG(DEBUG, TAG, "jarrayObj is null"); continue; } - OICFree(state); + OICFree(deviceInfo); } OICFree(g_deviceStateList); @@ -497,35 +426,31 @@ void CAEDRNativeRemoveAllDeviceState() void CAEDRNativeRemoveDevice(const char *remoteAddress) { OIC_LOG(DEBUG, TAG, "CAEDRNativeRemoveDeviceforStateList"); + VERIFY_NON_NULL_VOID(remoteAddress, TAG, "remoteAddress"); if (!g_deviceStateList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceStateList is null"); - return; - } - if (!remoteAddress) - { - OIC_LOG(ERROR, TAG, "[EDR][Native] remoteAddress is null"); + OIC_LOG(ERROR, TAG, "gdeviceStateList is null"); return; } - jint index; jint length = u_arraylist_length(g_deviceStateList); - for (index = 0; index < length; index++) + for (jint index = 0; index < length; index++) { - state_t* state = (state_t*) u_arraylist_get(g_deviceStateList, index); - if (!state) + CAConnectedDeviceInfo_t* deviceInfo = + (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index); + if (!deviceInfo) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] state_t object is null"); + OIC_LOG(DEBUG, TAG, "deviceInfo object is null"); continue; } - if (!strcmp((const char*) state->address, remoteAddress)) + if (!strcmp((const char*) deviceInfo->address, remoteAddress)) { - OIC_LOG_V(DEBUG, TAG, "[EDR][Native] remove state : %s", remoteAddress); - OICFree(state); + OIC_LOG_V(DEBUG, TAG, "remove [%s] info from list", remoteAddress); + OICFree(deviceInfo); - CAEDRReorderingDeviceList(index); + u_arraylist_remove(g_deviceStateList, index); break; } } @@ -535,63 +460,39 @@ void CAEDRNativeRemoveDevice(const char *remoteAddress) CAConnectedState_t CAEDRIsConnectedDevice(const char *remoteAddress) { OIC_LOG(DEBUG, TAG, "CAEDRIsConnectedDevice"); - - if (!remoteAddress) - { - OIC_LOG(ERROR, TAG, "[EDR][Native] remoteAddress is null"); - return STATE_DISCONNECTED; - } + VERIFY_NON_NULL_RET(remoteAddress, TAG, "remoteAddress", STATE_DISCONNECTED); if (!g_deviceStateList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceStateList is null"); + OIC_LOG(ERROR, TAG, "gdeviceStateList is null"); return STATE_DISCONNECTED; } - jint index; jint length = u_arraylist_length(g_deviceStateList); - for (index = 0; index < length; index++) + for (jint index = 0; index < length; index++) { - state_t* state = (state_t*) u_arraylist_get(g_deviceStateList, index); - if (!state) + CAConnectedDeviceInfo_t* deviceInfo = + (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index); + if (!deviceInfo) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] state_t object is null"); + OIC_LOG(DEBUG, TAG, "deviceInfo object is null"); continue; } - if (!strcmp((const char*) state->address, remoteAddress)) + if (!strcmp((const char*) deviceInfo->address, remoteAddress)) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] check whether it is connected or not"); - - return state->state; + return deviceInfo->state; } } return STATE_DISCONNECTED; } -void CAEDRReorderingDeviceList(uint32_t index) -{ - if (index >= g_deviceStateList->length) - { - return; - } - - if (index < g_deviceStateList->length - 1) - { - memmove(&g_deviceStateList->data[index], &g_deviceStateList->data[index + 1], - (g_deviceStateList->length - index - 1) * sizeof(void *)); - } - - g_deviceStateList->size--; - g_deviceStateList->length--; -} - /** * Device Socket Object List */ void CAEDRNativeCreateDeviceSocketList() { - OIC_LOG(DEBUG, TAG, "[EDR][Native] CAEDRNativeCreateDeviceSocketList"); + OIC_LOG(DEBUG, TAG, "CAEDRNativeCreateDeviceSocketList"); // create new object array if (NULL == g_deviceObjectList) @@ -604,70 +505,108 @@ void CAEDRNativeCreateDeviceSocketList() void CAEDRNativeAddDeviceSocketToList(JNIEnv *env, jobject deviceSocket) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] CANativeAddDeviceobjToList"); - - if (!deviceSocket) - { - OIC_LOG(ERROR, TAG, "[EDR][Native] Device is null"); - return; - } + OIC_LOG(DEBUG, TAG, "CANativeAddDeviceobjToList"); + VERIFY_NON_NULL_VOID(deviceSocket, TAG, "deviceSocket"); if (!g_deviceObjectList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null"); + OIC_LOG(ERROR, TAG, "gdeviceObjectList is null"); return; } jstring jni_remoteAddress = CAEDRNativeGetAddressFromDeviceSocket(env, deviceSocket); if (!jni_remoteAddress) { - OIC_LOG(ERROR, TAG, "[EDR][Native] jni_remoteAddress is null"); + OIC_LOG(ERROR, TAG, "jni_remoteAddress is null"); return; } const char* remoteAddress = (*env)->GetStringUTFChars(env, jni_remoteAddress, NULL); - if (!CAEDRNativeIsDeviceSocketInList(env, remoteAddress)) + if (CAEDRNativeIsDeviceSocketInList(env, remoteAddress)) { - jobject gDeviceSocker = (*env)->NewGlobalRef(env, deviceSocket); - u_arraylist_add(g_deviceObjectList, gDeviceSocker); - OIC_LOG(DEBUG, TAG, "Set Socket Object to Array"); + OIC_LOG(DEBUG, TAG, "the address exists in deviceObjectList. remove it to add new"); + CAEDRNativeRemoveDeviceSocketBaseAddr(env, jni_remoteAddress); } + (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress); + (*env)->DeleteLocalRef(env, jni_remoteAddress); + + CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) OICCalloc(1, sizeof(*socketInfo)); + if (!socketInfo) + { + OIC_LOG(ERROR, TAG, "Out of memory"); + return; + } + + jmethodID jni_mid_getInputStream = CAGetJNIMethodID(env, "android/bluetooth/BluetoothSocket", + "getInputStream", + "()Ljava/io/InputStream;"); + if (!jni_mid_getInputStream) + { + OIC_LOG(ERROR, TAG, "jni_mid_getInputStream is null"); + OICFree(socketInfo); + return; + } + + jobject jni_obj_inputStream = (*env)->CallObjectMethod(env, deviceSocket, + jni_mid_getInputStream); + if (!jni_obj_inputStream) + { + OIC_LOG(ERROR, TAG, "jni_obj_inputStream is null"); + OICFree(socketInfo); + return; + } + + socketInfo->deviceSocket = (*env)->NewGlobalRef(env, deviceSocket); + socketInfo->inputStream = (*env)->NewGlobalRef(env, jni_obj_inputStream); + (*env)->DeleteLocalRef(env, jni_obj_inputStream); + + bool result = u_arraylist_add(g_deviceObjectList, (void *) socketInfo); + if (!result) + { + OIC_LOG(ERROR, TAG, "u_arraylist_add failed."); + OICFree(socketInfo); + return; + } + + OIC_LOG(DEBUG, TAG, "add new device socket object to list"); } bool CAEDRNativeIsDeviceSocketInList(JNIEnv *env, const char* remoteAddress) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] CANativeIsDeviceObjInList"); + OIC_LOG(DEBUG, TAG, "CANativeIsDeviceObjInList"); + VERIFY_NON_NULL_RET(remoteAddress, TAG, "remoteAddress", false); - if (!remoteAddress) - { - OIC_LOG(ERROR, TAG, "[EDR][Native] remoteAddress is null"); - return false; - } - jint index; - jint length = u_arraylist_length(g_deviceStateList); - for (index = 0; index < length; index++) + jint length = u_arraylist_length(g_deviceObjectList); + for (jint index = 0; index < length; index++) { + CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) u_arraylist_get(g_deviceObjectList, + index); + if (!socketInfo) + { + OIC_LOG(DEBUG, TAG, "socketInfo is null"); + return false; + } - jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index); + jobject jarrayObj = socketInfo->deviceSocket; if (!jarrayObj) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] jarrayObj is null"); + OIC_LOG(DEBUG, TAG, "jarrayObj is null"); return false; } jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj); if (!jni_setAddress) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_setAddress is null"); + OIC_LOG(DEBUG, TAG, "jni_setAddress is null"); return false; } const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL); if (!setAddress) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] setAddress is null"); + OIC_LOG(DEBUG, TAG, "setAddress is null"); return false; } @@ -684,42 +623,35 @@ bool CAEDRNativeIsDeviceSocketInList(JNIEnv *env, const char* remoteAddress) } } - OIC_LOG(DEBUG, TAG, "there are no the Device obejct in list. we can add"); + OIC_LOG(DEBUG, TAG, "there are no the Device obejct in list"); return false; } void CAEDRNativeSocketCloseToAll(JNIEnv *env) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] CAEDRNativeSocketCloseToAll"); + OIC_LOG(DEBUG, TAG, "CAEDRNativeSocketCloseToAll"); if (!g_deviceObjectList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null"); + OIC_LOG(ERROR, TAG, "gdeviceObjectList is null"); return; } - jclass jni_cid_BTSocket = (*env)->FindClass(env, CLASSPATH_BT_SOCKET); - if (!jni_cid_BTSocket) - { - OIC_LOG(ERROR, TAG, "[EDR][Native] close: jni_cid_BTSocket is null"); - return; - } - - jmethodID jni_mid_close = (*env)->GetMethodID(env, jni_cid_BTSocket, "close", "()V"); + jmethodID jni_mid_close = CAGetJNIMethodID(env, CLASSPATH_BT_SOCKET, + "close", "()V"); if (!jni_mid_close) { - OIC_LOG(ERROR, TAG, "[EDR][Native] close: jni_mid_close is null"); + OIC_LOG(ERROR, TAG, "jni_mid_close is null"); return; } - jint index; - jint length = u_arraylist_length(g_deviceStateList); - for (index = 0; index < length; index++) + jint length = u_arraylist_length(g_deviceObjectList); + for (jint index = 0; index < length; index++) { jobject jni_obj_socket = (jobject) u_arraylist_get(g_deviceObjectList, index); if (!jni_obj_socket) { - OIC_LOG(ERROR, TAG, "[EDR][Native] socket obj is null"); + OIC_LOG(ERROR, TAG, "socket obj is null"); return; } @@ -727,7 +659,7 @@ void CAEDRNativeSocketCloseToAll(JNIEnv *env) if ((*env)->ExceptionCheck(env)) { - OIC_LOG(ERROR, TAG, "[EDR][Native] close: close is Failed!!!"); + OIC_LOG(ERROR, TAG, "close is Failed!!!"); (*env)->ExceptionDescribe(env); (*env)->ExceptionClear(env); return; @@ -741,21 +673,32 @@ void CAEDRNativeRemoveAllDeviceSocket(JNIEnv *env) if (!g_deviceObjectList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null"); + OIC_LOG(ERROR, TAG, "gdeviceObjectList is null"); return; } - jint index; - jint length = u_arraylist_length(g_deviceStateList); - for (index = 0; index < length; index++) + jint length = u_arraylist_length(g_deviceObjectList); + for (jint index = 0; index < length; index++) { - jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index); - if (!jarrayObj) + CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) u_arraylist_get(g_deviceObjectList, + index); + if (!socketInfo) { - OIC_LOG(ERROR, TAG, "[EDR][Native] jarrayObj is null"); - return; + OIC_LOG(ERROR, TAG, "socketInfo is null"); + continue; + } + + jobject jdeviceSocket = socketInfo->deviceSocket; + if (jdeviceSocket) + { + (*env)->DeleteGlobalRef(env, jdeviceSocket); + } + + jobject jinputStream = socketInfo->inputStream; + if (jinputStream) + { + (*env)->DeleteGlobalRef(env, jinputStream); } - (*env)->DeleteGlobalRef(env, jarrayObj); } OICFree(g_deviceObjectList); @@ -766,121 +709,107 @@ void CAEDRNativeRemoveAllDeviceSocket(JNIEnv *env) void CAEDRNativeRemoveDeviceSocket(JNIEnv *env, jobject deviceSocket) { OIC_LOG(DEBUG, TAG, "CAEDRNativeRemoveDeviceSocket"); + VERIFY_NON_NULL_VOID(deviceSocket, TAG, "deviceSocket"); - if (!g_deviceObjectList) + jstring jni_address = CAEDRNativeGetAddressFromDeviceSocket(env, deviceSocket); + if (!jni_address) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null"); + OIC_LOG(ERROR, TAG, "jni_address is null"); return; } - jint index; - jint length = u_arraylist_length(g_deviceStateList); - for (index = 0; index < length; index++) - { - jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index); - if (!jarrayObj) - { - OIC_LOG(DEBUG, TAG, "[EDR][Native] jarrayObj is null"); - continue; - } - - jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj); - if (!jni_setAddress) - { - OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_setAddress is null"); - continue; - } - - jstring jni_remoteAddress = CAEDRNativeGetAddressFromDeviceSocket(env, deviceSocket); - if (!jni_remoteAddress) - { - OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_remoteAddress is null"); - continue; - } - - const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL); - const char* remoteAddress = (*env)->GetStringUTFChars(env, jni_remoteAddress, NULL); - - if (!strcmp(setAddress, remoteAddress)) - { - OIC_LOG_V(DEBUG, TAG, "[EDR][Native] remove object : %s", remoteAddress); - (*env)->DeleteGlobalRef(env, jarrayObj); - (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress); - (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress); - - CAEDRReorderingDeviceSocketList(index); - break; - } - (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress); - (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress); - } + CAEDRNativeRemoveDeviceSocketBaseAddr(env, jni_address); - OIC_LOG(DEBUG, TAG, "[EDR][Native] there are no target object"); return; } void CAEDRNativeRemoveDeviceSocketBaseAddr(JNIEnv *env, jstring address) { - OIC_LOG(DEBUG, TAG, "CAEDRNativeRemoveDeviceSocket"); + OIC_LOG(DEBUG, TAG, "CAEDRNativeRemoveDeviceSocketBaseAddr"); + VERIFY_NON_NULL_VOID(address, TAG, "address"); if (!g_deviceObjectList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null"); + OIC_LOG(ERROR, TAG, "gdeviceObjectList is null"); return; } - jint index; - jint length = u_arraylist_length(g_deviceStateList); - for (index = 0; index < length; index++) + const char* targetAddress = (*env)->GetStringUTFChars(env, address, NULL); + + jint length = u_arraylist_length(g_deviceObjectList); + for (jint index = 0; index < length; index++) { - jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index); + CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) u_arraylist_get(g_deviceObjectList, + index); + if (!socketInfo) + { + OIC_LOG(ERROR, TAG, "socketInfo is null"); + continue; + } + + jobject jarrayObj = socketInfo->deviceSocket; if (!jarrayObj) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] jarrayObj is null"); + OIC_LOG(DEBUG, TAG, "jarrayObj is null"); continue; } jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj); if (!jni_setAddress) { - OIC_LOG(ERROR, TAG, "[EDR][Native] jni_setAddress is null"); + OIC_LOG(ERROR, TAG, "jni_setAddress is null"); continue; } + const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL); - const char* remoteAddress = (*env)->GetStringUTFChars(env, address, NULL); - if (!strcmp(setAddress, remoteAddress)) + if (!strcmp(setAddress, targetAddress)) { - OIC_LOG_V(ERROR, TAG, "[EDR][Native] remove object : %s", remoteAddress); + OIC_LOG_V(DEBUG, TAG, "remove object : %s", targetAddress); (*env)->DeleteGlobalRef(env, jarrayObj); + jobject jinputStream = socketInfo->inputStream; + if (jinputStream) + { + (*env)->DeleteGlobalRef(env, jinputStream); + } + (*env)->ReleaseStringUTFChars(env, address, targetAddress); (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress); - (*env)->ReleaseStringUTFChars(env, address, remoteAddress); + (*env)->DeleteLocalRef(env, jni_setAddress); - CAEDRReorderingDeviceSocketList(index); - break; + u_arraylist_remove(g_deviceObjectList, index); + return; } (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress); - (*env)->ReleaseStringUTFChars(env, address, remoteAddress); + (*env)->DeleteLocalRef(env, jni_setAddress); } - OIC_LOG(DEBUG, TAG, "[EDR][Native] there are no target object"); + OIC_LOG_V(DEBUG, TAG, "the target object doesn't exist in deviceObjectList (addr: %s)", + targetAddress); + (*env)->ReleaseStringUTFChars(env, address, targetAddress); + return; } -jobject CAEDRNativeGetDeviceSocket(uint32_t idx) +jobject CAEDRNativeGetDeviceSocket(uint32_t index) { - OIC_LOG(DEBUG, TAG, "CAEDRNativeGetDeviceSocket"); - if (!g_deviceObjectList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null"); + OIC_LOG(ERROR, TAG, "gdeviceObjectList is null"); return NULL; } - jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, idx); + CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) u_arraylist_get(g_deviceObjectList, + index); + if (!socketInfo) + { + OIC_LOG(ERROR, TAG, "socketInfo is null"); + return NULL; + } + + jobject jarrayObj = socketInfo->deviceSocket; if (!jarrayObj) { - OIC_LOG(ERROR, TAG, "[EDR][Native] jarrayObj is not available"); + OIC_LOG(ERROR, TAG, "jarrayObj is not available"); return NULL; } return jarrayObj; @@ -888,71 +817,117 @@ jobject CAEDRNativeGetDeviceSocket(uint32_t idx) jobject CAEDRNativeGetDeviceSocketBaseAddr(JNIEnv *env, const char* remoteAddress) { - OIC_LOG(DEBUG, TAG, "CAEDRNativeGetDeviceSocket"); + OIC_LOG(DEBUG, TAG, "CAEDRNativeGetDeviceSocketBaseAddr"); + VERIFY_NON_NULL_RET(remoteAddress, TAG, "remoteAddress", NULL); if (!g_deviceObjectList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null"); + OIC_LOG(ERROR, TAG, "gdeviceObjectList is null"); return NULL; } - jint index; - jint length = u_arraylist_length(g_deviceStateList); - for (index = 0; index < length; index++) + jint length = u_arraylist_length(g_deviceObjectList); + for (jint index = 0; index < length; index++) { - jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index); + CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) u_arraylist_get(g_deviceObjectList, + index); + if (!socketInfo) + { + OIC_LOG(ERROR, TAG, "socketInfo is null"); + continue; + } + + jobject jarrayObj = socketInfo->deviceSocket; if (!jarrayObj) { - OIC_LOG(ERROR, TAG, "[EDR][Native] jarrayObj is null"); + OIC_LOG(ERROR, TAG, "jarrayObj is null"); continue; } jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj); if (!jni_setAddress) { - OIC_LOG(ERROR, TAG, "[EDR][Native] jni_setAddress is null"); + OIC_LOG(ERROR, TAG, "jni_setAddress is null"); continue; } const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL); if (!strcmp(setAddress, remoteAddress)) { - OIC_LOG_V(ERROR, TAG, "[EDR][Native] remove object : %s", remoteAddress); + OIC_LOG_V(ERROR, TAG, "remove object : %s", remoteAddress); (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress); + (*env)->DeleteLocalRef(env, jni_setAddress); return jarrayObj; } (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress); + (*env)->DeleteLocalRef(env, jni_setAddress); } return NULL; } -uint32_t CAEDRGetSocketListLength() +jobject CAEDRNativeGetInputStream(uint32_t index) { if (!g_deviceObjectList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null"); - return 0; + OIC_LOG(ERROR, TAG, "gdeviceObjectList is null"); + return NULL; } - uint32_t length = u_arraylist_length(g_deviceObjectList); + CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) u_arraylist_get(g_deviceObjectList, + index); + if (!socketInfo) + { + OIC_LOG(ERROR, TAG, "socketInfo is null"); + return NULL; + } - return length; + jobject jarrayObj = socketInfo->inputStream; + if (!jarrayObj) + { + OIC_LOG(ERROR, TAG, "jarrayObj is not available"); + return NULL; + } + return jarrayObj; } -void CAEDRReorderingDeviceSocketList(uint32_t index) +uint32_t CAEDRGetSocketListLength() { - if (index >= g_deviceObjectList->length) + if (!g_deviceObjectList) { - return; + OIC_LOG(ERROR, TAG, "gdeviceObjectList is null"); + return 0; } - if (index < g_deviceObjectList->length - 1) + return u_arraylist_length(g_deviceObjectList); +} + +CAConnectedDeviceInfo_t *CAEDRGetDeviceInfoFromAddress(const char *remoteAddress) +{ + OIC_LOG(DEBUG, TAG, "CAEDRGetDeviceInfoFromAddress"); + VERIFY_NON_NULL_RET(remoteAddress, TAG, "remoteAddress", NULL); + + if (!g_deviceStateList) { - memmove(&g_deviceObjectList->data[index], &g_deviceObjectList->data[index + 1], - (g_deviceObjectList->length - index - 1) * sizeof(void *)); + OIC_LOG(ERROR, TAG, "gdeviceStateList is null"); + return NULL; } - g_deviceObjectList->size--; - g_deviceObjectList->length--; + jint length = u_arraylist_length(g_deviceStateList); + for (jint index = 0; index < length; index++) + { + CAConnectedDeviceInfo_t* deviceInfo = + (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index); + if (!deviceInfo) + { + OIC_LOG(DEBUG, TAG, "deviceInfo object is null"); + continue; + } + + if (!strcmp((const char*) deviceInfo->address, remoteAddress)) + { + return deviceInfo; + } + } + return NULL; }