X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fconnectivity%2Fsrc%2Fbt_edr_adapter%2Fandroid%2Fcaedrutils.c;h=a70ddc0d43e0780a6c914e1d11572fae227010e5;hb=32804dcf9a0c1ef2d2ea6e29a8f4fda86aabf9b5;hp=773eed923147f96b749a899ad25c194f1a559b7b;hpb=b6000d631514604bb6f6ccc30e0ee00003fda8d1;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 773eed9..a70ddc0 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;"; @@ -45,24 +46,15 @@ jstring CAEDRNativeGetAddressFromDeviceSocket(JNIEnv *env, jobject bluetoothSock { if (!bluetoothSocketObj) { - OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: bluetoothSocketObj is null"); + OIC_LOG(ERROR, TAG, "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; - } - - 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 +62,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 +95,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 +104,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 +113,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 +122,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 +131,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 +148,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 +157,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 +166,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 +177,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,48 +187,28 @@ 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); - (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices); - - 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); - (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices); - - 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); - (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices); - - 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); @@ -268,6 +216,12 @@ jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env) (*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) @@ -275,7 +229,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; } @@ -284,12 +238,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); @@ -301,7 +255,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; } @@ -310,9 +264,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; } @@ -320,9 +273,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; } @@ -330,10 +282,9 @@ 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; } @@ -349,21 +300,17 @@ 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"); + OIC_LOG(ERROR, TAG, "bluetoothDevice is null"); return 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; } @@ -371,7 +318,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; @@ -382,7 +329,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) @@ -397,72 +344,69 @@ void CAEDRUpdateDeviceState(CAConnectedState_t state, const char *address) { if (!address) { - OIC_LOG(ERROR, TAG, "[EDR][Native] address is null"); + OIC_LOG(ERROR, TAG, "address is null"); return; } - state_t *newstate = (state_t*) OICCalloc(1, sizeof(state_t)); - if (!newstate) + 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) + if (!deviceInfo) { - OIC_LOG(ERROR, TAG, "[EDR][Native] device is null"); + OIC_LOG(ERROR, TAG, "device is null"); return; } 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) { - if (!remoteAddress) { - OIC_LOG(ERROR, TAG, "[EDR][Native] remoteAddress is null"); + OIC_LOG(ERROR, TAG, "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."); @@ -475,7 +419,7 @@ void CAEDRNativeRemoveAllDeviceState() if (!g_deviceStateList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceStateList is null"); + OIC_LOG(ERROR, TAG, "gdeviceStateList is null"); return; } @@ -483,13 +427,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); @@ -503,30 +448,30 @@ void CAEDRNativeRemoveDevice(const char *remoteAddress) if (!g_deviceStateList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceStateList is null"); + OIC_LOG(ERROR, TAG, "gdeviceStateList is null"); return; } if (!remoteAddress) { - OIC_LOG(ERROR, TAG, "[EDR][Native] remoteAddress is null"); + OIC_LOG(ERROR, TAG, "remoteAddress 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); u_arraylist_remove(g_deviceStateList, index); break; @@ -541,30 +486,30 @@ CAConnectedState_t CAEDRIsConnectedDevice(const char *remoteAddress) if (!remoteAddress) { - OIC_LOG(ERROR, TAG, "[EDR][Native] remoteAddress is null"); + OIC_LOG(ERROR, TAG, "remoteAddress is null"); return 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)) { - return state->state; + return deviceInfo->state; } } return STATE_DISCONNECTED; @@ -575,7 +520,7 @@ CAConnectedState_t CAEDRIsConnectedDevice(const char *remoteAddress) */ void CAEDRNativeCreateDeviceSocketList() { - OIC_LOG(DEBUG, TAG, "[EDR][Native] CAEDRNativeCreateDeviceSocketList"); + OIC_LOG(DEBUG, TAG, "CAEDRNativeCreateDeviceSocketList"); // create new object array if (NULL == g_deviceObjectList) @@ -588,24 +533,24 @@ void CAEDRNativeCreateDeviceSocketList() void CAEDRNativeAddDeviceSocketToList(JNIEnv *env, jobject deviceSocket) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] CANativeAddDeviceobjToList"); + OIC_LOG(DEBUG, TAG, "CANativeAddDeviceobjToList"); if (!deviceSocket) { - OIC_LOG(ERROR, TAG, "[EDR][Native] Device is null"); + OIC_LOG(ERROR, TAG, "Device is null"); return; } 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; } @@ -613,9 +558,44 @@ void CAEDRNativeAddDeviceSocketToList(JNIEnv *env, jobject deviceSocket) 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"); + 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"); + 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"); + 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"); } (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress); (*env)->DeleteLocalRef(env, jni_remoteAddress); @@ -623,36 +603,43 @@ void CAEDRNativeAddDeviceSocketToList(JNIEnv *env, jobject deviceSocket) bool CAEDRNativeIsDeviceSocketInList(JNIEnv *env, const char* remoteAddress) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] CANativeIsDeviceObjInList"); + OIC_LOG(DEBUG, TAG, "CANativeIsDeviceObjInList"); if (!remoteAddress) { - OIC_LOG(ERROR, TAG, "[EDR][Native] remoteAddress is null"); + OIC_LOG(ERROR, TAG, "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++) { + 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; } @@ -669,42 +656,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"); - 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"); + OIC_LOG(ERROR, TAG, "gdeviceObjectList 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++) + 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; } @@ -712,7 +692,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; @@ -726,21 +706,33 @@ 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++) + 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); @@ -754,32 +746,39 @@ void CAEDRNativeRemoveDeviceSocket(JNIEnv *env, jobject deviceSocket) 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++) + 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(DEBUG, TAG, "[EDR][Native] jni_setAddress is null"); + OIC_LOG(DEBUG, TAG, "jni_setAddress is null"); continue; } jstring jni_remoteAddress = CAEDRNativeGetAddressFromDeviceSocket(env, deviceSocket); if (!jni_remoteAddress) { - OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_remoteAddress is null"); + OIC_LOG(DEBUG, TAG, "jni_remoteAddress is null"); continue; } @@ -788,8 +787,13 @@ void CAEDRNativeRemoveDeviceSocket(JNIEnv *env, jobject deviceSocket) if (!strcmp(setAddress, remoteAddress)) { - OIC_LOG_V(DEBUG, TAG, "[EDR][Native] remove object : %s", remoteAddress); + OIC_LOG_V(DEBUG, TAG, "remove object : %s", remoteAddress); (*env)->DeleteGlobalRef(env, jarrayObj); + jobject jinputStream = socketInfo->inputStream; + if (jinputStream) + { + (*env)->DeleteGlobalRef(env, jinputStream); + } (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress); (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress); @@ -800,7 +804,7 @@ void CAEDRNativeRemoveDeviceSocket(JNIEnv *env, jobject deviceSocket) (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress); } - OIC_LOG(DEBUG, TAG, "[EDR][Native] there are no target object"); + OIC_LOG(DEBUG, TAG, "there are no target object"); return; } @@ -810,25 +814,32 @@ void CAEDRNativeRemoveDeviceSocketBaseAddr(JNIEnv *env, jstring 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++) + 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); @@ -836,8 +847,13 @@ void CAEDRNativeRemoveDeviceSocketBaseAddr(JNIEnv *env, jstring address) if (!strcmp(setAddress, remoteAddress)) { - OIC_LOG_V(ERROR, TAG, "[EDR][Native] remove object : %s", remoteAddress); + OIC_LOG_V(DEBUG, TAG, "remove object : %s", remoteAddress); (*env)->DeleteGlobalRef(env, jarrayObj); + jobject jinputStream = socketInfo->inputStream; + if (jinputStream) + { + (*env)->DeleteGlobalRef(env, jinputStream); + } (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress); (*env)->ReleaseStringUTFChars(env, address, remoteAddress); @@ -848,22 +864,30 @@ void CAEDRNativeRemoveDeviceSocketBaseAddr(JNIEnv *env, jstring address) (*env)->ReleaseStringUTFChars(env, address, remoteAddress); } - OIC_LOG(DEBUG, TAG, "[EDR][Native] there are no target object"); + OIC_LOG(DEBUG, TAG, "there are no target object"); return; } -jobject CAEDRNativeGetDeviceSocket(uint32_t idx) +jobject CAEDRNativeGetDeviceSocket(uint32_t index) { if (!g_deviceObjectList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null"); + OIC_LOG(ERROR, TAG, "gdeviceObjectList is null"); + return NULL; + } + + CAEDRSocketInfo_t *socketInfo = (CAEDRSocketInfo_t *) u_arraylist_get(g_deviceObjectList, + index); + if (!socketInfo) + { + OIC_LOG(ERROR, TAG, "socketInfo is null"); return NULL; } - jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, idx); + 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; @@ -875,32 +899,39 @@ jobject CAEDRNativeGetDeviceSocketBaseAddr(JNIEnv *env, const char* remoteAddres 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++) + 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; @@ -912,15 +943,72 @@ jobject CAEDRNativeGetDeviceSocketBaseAddr(JNIEnv *env, const char* remoteAddres return NULL; } +jobject CAEDRNativeGetInputStream(uint32_t index) +{ + if (!g_deviceObjectList) + { + OIC_LOG(ERROR, TAG, "gdeviceObjectList is null"); + return NULL; + } + + 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->inputStream; + if (!jarrayObj) + { + OIC_LOG(ERROR, TAG, "jarrayObj is not available"); + return NULL; + } + return jarrayObj; +} + uint32_t CAEDRGetSocketListLength() { if (!g_deviceObjectList) { - OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null"); + OIC_LOG(ERROR, TAG, "gdeviceObjectList is null"); return 0; } - uint32_t length = u_arraylist_length(g_deviceObjectList); + return u_arraylist_length(g_deviceObjectList); +} + +CAConnectedDeviceInfo_t *CAEDRGetDeviceInfoFromAddress(const char *remoteAddress) +{ + OIC_LOG(DEBUG, TAG, "CAEDRGetDeviceInfoFromAddress"); + + if (!g_deviceStateList) + { + OIC_LOG(ERROR, TAG, "gdeviceStateList is null"); + return NULL; + } + if (!remoteAddress) + { + OIC_LOG(ERROR, TAG, "remoteAddress is null"); + return NULL; + } + + 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; + } - return length; + if (!strcmp((const char*) deviceInfo->address, remoteAddress)) + { + return deviceInfo; + } + } + return NULL; }