X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fconnectivity%2Fsrc%2Fbt_le_adapter%2Fandroid%2Fcaleclient.c;h=9bf93301f603f287ed7ed5b8d958af795aaeaad6;hb=b98490d733fdce1c6e6ae4056cb0cceb6876b817;hp=83ed0ae2ce9f03295630643c704f37da5a2be5a5;hpb=c3f37d6a7a7ec6cc892e97b5278bd4f8ef3e3c74;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.c b/resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.c index 83ed0ae..9bf9330 100644 --- a/resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.c +++ b/resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.c @@ -30,6 +30,7 @@ #include "caleinterface.h" #include "caadapterutils.h" +#include "uarraylist.h" #include "logger.h" #include "oic_malloc.h" #include "oic_string.h" @@ -121,6 +122,15 @@ static int32_t g_jniIntSdk = -1; static bool g_setHighQoS = true; static bool g_setFullScanFlag = false; jclass g_LEInterface = NULL; +static int g_manufactureDataCount = 0; +static int g_serviceUuidCount = 0; + +// List of Service UUIDs +static u_arraylist_t* g_serviceUuidList = NULL; + +// List of Manufacture Data +static u_arraylist_t* g_manufactureDataList = NULL; + /** * check if retry logic for connection routine has to be stopped or not. * in case of error value including this method, connection routine has to be stopped. @@ -421,11 +431,62 @@ error_exit: return CA_STATUS_FAILED; } +void CALEClientAddUuid(char* uuid, int uuid_type) +{ + OIC_LOG(DEBUG, TAG, "CALEClientAddUuid"); + VERIFY_NON_NULL_VOID(uuid, TAG, "uuid is null"); + + if (uuid_type == CA_LE_TYPE_CUSTOM_UUID) + { + if (g_manufactureDataCount == 0) + { + g_manufactureDataList = u_arraylist_create(); + OIC_LOG(DEBUG, TAG, "List of manufacture data created"); + } + for (int i = 0; i < g_manufactureDataCount; i++) + { + char *str = u_arraylist_get(g_manufactureDataList, i); + if (!strcmp(uuid, str)) + { + OIC_LOG(DEBUG, TAG, "UUID already set before"); + return; + } + } + g_manufactureDataCount++; + bool result = u_arraylist_add(g_manufactureDataList, uuid); + OIC_LOG_V(DEBUG, TAG, "Adding manufacture data: %s", u_arraylist_get(g_manufactureDataList, g_manufactureDataCount - 1)); + } + else //uuid_type == CA_LE_TYPE_SERVICE_UUID + { + if (g_serviceUuidCount == 0) + { + g_serviceUuidList = u_arraylist_create(); + OIC_LOG(DEBUG, TAG, "List of service uuid created"); + } + for (int i = 0; i < g_serviceUuidCount; i++) + { + char *str = u_arraylist_get(g_serviceUuidList, i); + if (!strcmp(uuid, str)) + { + OIC_LOG(DEBUG, TAG, "UUID already set before"); + return; + } + } + g_serviceUuidCount++; + bool result = u_arraylist_add(g_serviceUuidList, uuid); + OIC_LOG_V(DEBUG, TAG, "Adding service UUID: %s", u_arraylist_get(g_serviceUuidList, g_serviceUuidCount - 1)); + } +} + CAResult_t CALEClientInitialize() { OIC_LOG(DEBUG, TAG, "CALEClientInitialize"); CALEClientJniInit(); + CALEClientAddUuid(OIC_GATT_SERVICE_UUID, CA_LE_TYPE_SERVICE_UUID); + CALEClientAddUuid(OIC_GATT_CUSTOM_UUID, CA_LE_TYPE_CUSTOM_UUID); + CALEClientAddUuid(OIC_GATT_CUSTOM_UUID2, CA_LE_TYPE_CUSTOM_UUID); + CALEClientAddUuid(OIC_GATT_CUSTOM_UUID3, CA_LE_TYPE_CUSTOM_UUID); if (!g_jvm) { @@ -570,6 +631,9 @@ void CALEClientTerminate() g_LEInterface = NULL; } + u_arraylist_free(&g_serviceUuidList); + u_arraylist_free(&g_manufactureDataList); + CALEDeleteSendBuffer(env); if (g_uuidList) @@ -1767,6 +1831,7 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids VERIFY_NON_NULL(uuids, TAG, "uuids is null"); VERIFY_NON_NULL(env, TAG, "env is null"); + int i, j; if (!CALEIsEnableBTAdapter(env)) { OIC_LOG(INFO, TAG, "BT adapter is not enabled"); @@ -1821,53 +1886,35 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids } // call scanfilter.Builder() - jobject jni_obj_scanfilterBuilder = (*env)->NewObject(env, jni_cid_scanfilterBuilder, - jni_mid_scanfilterBuilderCtor); - if (!jni_obj_scanfilterBuilder) + jobject jni_obj_servicescanfilterBuilder[g_serviceUuidCount]; + for (i = 0; i < g_serviceUuidCount; i++) { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilterBuilder is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - return CA_STATUS_FAILED; - } - - // call scanfilter.Builder() - jobject jni_obj_scanfilterBuilder2 = (*env)->NewObject(env, jni_cid_scanfilterBuilder, + jni_obj_servicescanfilterBuilder[i] = (*env)->NewObject(env, jni_cid_scanfilterBuilder, jni_mid_scanfilterBuilderCtor); - if (!jni_obj_scanfilterBuilder2) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilterBuilder2 is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - return CA_STATUS_FAILED; + if (!jni_obj_servicescanfilterBuilder[i]) + { + OIC_LOG_V(ERROR, TAG, "scanfilter: jni_obj_servicescanfilterBuilder[%d] is null", i); + (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); + for (j = 0; j < i; j++) + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[j]); + return CA_STATUS_FAILED; + } } // call scanfilter.Builder() - jobject jni_obj_scanfilterBuilder3 = (*env)->NewObject(env, jni_cid_scanfilterBuilder, - jni_mid_scanfilterBuilderCtor); - if (!jni_obj_scanfilterBuilder3) + jobject jni_obj_customscanfilterBuilder[g_manufactureDataCount]; + for (i = 0; i < g_manufactureDataCount; i++) { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilterBuilder3 is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - return CA_STATUS_FAILED; - } - - // call scanfilter.Builder() - jobject jni_obj_scanfilterBuilder4 = (*env)->NewObject(env, jni_cid_scanfilterBuilder, + jni_obj_customscanfilterBuilder[i] = (*env)->NewObject(env, jni_cid_scanfilterBuilder, jni_mid_scanfilterBuilderCtor); - if (!jni_obj_scanfilterBuilder4) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilterBuilder4 is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - return CA_STATUS_FAILED; + if (!jni_obj_customscanfilterBuilder[i]) + { + OIC_LOG_V(ERROR, TAG, "scanfilter: jni_obj_customscanfilterBuilder[%d] is null", i); + (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); + for (j = 0; j < i; j++) + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + return CA_STATUS_FAILED; + } } // get scanfilter.Builder.setServiceUuid method id @@ -1880,10 +1927,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids OIC_LOG(ERROR, TAG, "scanfilter: jni_mid_setServiceUuid is null"); CACheckJNIException(env); (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); + for (i = 0; i < g_serviceUuidCount; i++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[i]); + } + for (i = 0; i < g_manufactureDataCount; i++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[i]); + } return CA_STATUS_FAILED; } @@ -1897,10 +1948,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids OIC_LOG(ERROR, TAG, "scanfilter: jni_mid_setManufacturerData is null"); CACheckJNIException(env); (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); + for (i = 0; i < g_serviceUuidCount; i++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[i]); + } + for (i = 0; i < g_manufactureDataCount; i++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[i]); + } return CA_STATUS_FAILED; } // get scanfilter.Builder.build method id @@ -1914,200 +1969,146 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids OIC_LOG(ERROR, TAG, "scanfilter: jni_mid_build_scanfilterBuilder is null"); CACheckJNIException(env); (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); + for (i = 0; i < g_serviceUuidCount; i++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[i]); + } + for (i = 0; i < g_manufactureDataCount; i++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[i]); + } return CA_STATUS_FAILED; } (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - // call ParcelUuid.fromSting(uuid) - jobject jni_obj_parcelUuid = CALEGetParcelUuidFromString(env, OIC_GATT_SERVICE_UUID); - if (!jni_obj_parcelUuid) + jobject jni_obj_parcelUuid, jni_obj_setServiceUuid; + jobject jni_obj_servicescanfilter[g_serviceUuidCount]; + + for (i = 0; i < g_serviceUuidCount; i++) { - OIC_LOG(ERROR, TAG, "scanSettings: jni_obj_parcelUuid is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } + // call ParcelUuid.fromSting(uuid) + jni_obj_parcelUuid = CALEGetParcelUuidFromString(env, u_arraylist_get(g_serviceUuidList, i)); + if (!jni_obj_parcelUuid) + { + OIC_LOG(ERROR, TAG, "scanSettings: jni_obj_parcelUuid is null"); + CACheckJNIException(env); + for (j = i; j < g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[j]); + } + for (j = 0; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + } + return CA_STATUS_FAILED; + } - // call setServiceUuid(uuid) - jobject jni_obj_setServiceUuid = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder, + // call setServiceUuid(uuid) + jni_obj_setServiceUuid = (*env)->CallObjectMethod(env, + jni_obj_servicescanfilterBuilder[i], jni_mid_setServiceUuid, jni_obj_parcelUuid); - if (!jni_obj_setServiceUuid) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_setServiceUuid is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); + if (!jni_obj_setServiceUuid) + { + OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_setServiceUuid is null"); + CACheckJNIException(env); + for (j = i; j < g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[j]); + } + for (j = 0; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + } + (*env)->DeleteLocalRef(env, jni_obj_parcelUuid); + return CA_STATUS_FAILED; + } (*env)->DeleteLocalRef(env, jni_obj_parcelUuid); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_obj_parcelUuid); - (*env)->DeleteLocalRef(env, jni_obj_setServiceUuid); + (*env)->DeleteLocalRef(env, jni_obj_setServiceUuid); - // call build() - jobject jni_obj_scanfilter = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder, + // call build() + jni_obj_servicescanfilter[i] = (*env)->CallObjectMethod(env, + jni_obj_servicescanfilterBuilder[i], jni_mid_build_scanfilterBuilder); - if (!jni_obj_scanfilter) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilter is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); + if (!jni_obj_servicescanfilter[i]) + { + OIC_LOG_V(ERROR, TAG, "scanfilter: jni_obj_scanfilter[%d] is null", i); + CACheckJNIException(env); + for (j = i; j < g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[j]); + } + for (j = 0; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + } + return CA_STATUS_FAILED; + } + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[i]); - OIC_LOG(DEBUG, TAG, "Service UUID scanfilter set"); + OIC_LOG_V(DEBUG, TAG, "Total %d Service UUID based scanfilter(s) created by now", i + 1); + } jint jni_int_manId; jbyteArray jni_byte_manData; + jobject jni_obj_setManufacturerData; + jobject jni_obj_customscanfilter[g_manufactureDataCount]; // set manufactererId jni_int_manId = MANUFACTURE_ID; - // call utility function to set manufacturerData - jni_byte_manData = CALEGetManufacturerData(env, OIC_GATT_CUSTOM_UUID); - if(!jni_byte_manData) - { - OIC_LOG(ERROR, TAG, "scanSettings: jni_byte_manData is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - - // call set(uuid) - jobject jni_obj_setManufacturerData = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder2, - jni_mid_setManufacturerData, - jni_int_manId, - jni_byte_manData); - if (!jni_obj_setManufacturerData) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_setManufacturerData is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_byte_manData); - (*env)->DeleteLocalRef(env, jni_obj_setManufacturerData); - - // call build() - jobject jni_obj_scanfilter2 = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder2, - jni_mid_build_scanfilterBuilder); - if (!jni_obj_scanfilter2) + // set custom scanfilters + for (i = 0; i < g_manufactureDataCount; i++) { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilter2 is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - - OIC_LOG(DEBUG, TAG, "First custom UUID scanfilter set"); - - // call utility function to set manufacturerData - jni_byte_manData = CALEGetManufacturerData(env, OIC_GATT_CUSTOM_UUID2); - if(!jni_byte_manData) - { - OIC_LOG(ERROR, TAG, "scanSettings: jni_byte_manData is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } + // call utility function to set manufacturerData + jni_byte_manData = CALEGetManufacturerData(env, u_arraylist_get(g_manufactureDataList, i)); + if (!jni_byte_manData) + { + OIC_LOG(ERROR, TAG, "scanSettings: jni_byte_manData is null"); + CACheckJNIException(env); + for(j = i; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + } + return CA_STATUS_FAILED; + } - // call set(uuid) - jni_obj_setManufacturerData = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder3, + // call set(uuid) + jni_obj_setManufacturerData = (*env)->CallObjectMethod(env, + jni_obj_customscanfilterBuilder[i], jni_mid_setManufacturerData, jni_int_manId, jni_byte_manData); + if (!jni_obj_setManufacturerData) + { + OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_setManufacturerData is null"); + CACheckJNIException(env); + for (j = i; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + } + return CA_STATUS_FAILED; + } + (*env)->DeleteLocalRef(env, jni_byte_manData); + (*env)->DeleteLocalRef(env, jni_obj_setManufacturerData); + + // call build() + jni_obj_customscanfilter[i] = (*env)->CallObjectMethod(env, + jni_obj_customscanfilterBuilder[i], + jni_mid_build_scanfilterBuilder); + if (!jni_obj_customscanfilter[i]) + { + OIC_LOG_V(ERROR, TAG, "scanfilter: jni_obj_customscanfilter[%d] is null", i); + CACheckJNIException(env); + for (j = i; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + } + return CA_STATUS_FAILED; + } + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[i]); - if (!jni_obj_setManufacturerData) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_setManufacturerData is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_byte_manData); - (*env)->DeleteLocalRef(env, jni_obj_setManufacturerData); - - // call build() - jobject jni_obj_scanfilter3 = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder3, - jni_mid_build_scanfilterBuilder); - if (!jni_obj_scanfilter3) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilter3 is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - OIC_LOG(DEBUG, TAG, "Second custom UUID scanfilter set"); - - // call utility function to set manufacturerData - jni_byte_manData = CALEGetManufacturerData(env, OIC_GATT_CUSTOM_UUID3); - if(!jni_byte_manData) - { - OIC_LOG(ERROR, TAG, "scanSettings: jni_byte_manData is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - - // call set(uuid) - jni_obj_setManufacturerData = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder4, - jni_mid_setManufacturerData, - jni_int_manId, - jni_byte_manData); - - if (!jni_obj_setManufacturerData) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_setManufacturerData is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_byte_manData); - (*env)->DeleteLocalRef(env, jni_obj_setManufacturerData); - - // call build() - jobject jni_obj_scanfilter4 = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder4, - jni_mid_build_scanfilterBuilder); - if (!jni_obj_scanfilter4) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilter4 is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; + OIC_LOG_V(DEBUG, TAG, "Total %d manufacture data based scanfilter(s) created by now", i + 1); } - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - OIC_LOG(DEBUG, TAG, "Third custom UUID scanfilter set"); // get scanSettings.Builder class id jclass jni_cid_scanSettingsBuilder = (*env)->FindClass(env, @@ -2117,7 +2118,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "scanSettings: jni_cid_scanSettingsBuilder is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } return CA_STATUS_FAILED; } @@ -2128,7 +2136,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "scanSettings: jni_mid_scanSettingsBuilderCtor is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_scanSettingsBuilder); return CA_STATUS_FAILED; } @@ -2142,7 +2157,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "scanSettings: jni_mid_setScanMode is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_scanSettingsBuilder); return CA_STATUS_FAILED; } @@ -2157,7 +2179,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "scanSettings: jni_mid_build_scanSettings is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_scanSettingsBuilder); return CA_STATUS_FAILED; } @@ -2169,7 +2198,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanSettingBuilder is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_scanSettingsBuilder); return CA_STATUS_FAILED; } @@ -2180,7 +2216,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "ArrayList: jni_cid_arrayList is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); return CA_STATUS_FAILED; } @@ -2190,7 +2233,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "ArrayList: jni_mid_arrayListCtor is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_arrayList); (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); return CA_STATUS_FAILED; @@ -2202,7 +2252,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "ArrayList: jni_mid_arrayListAdd is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_arrayList); (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); return CA_STATUS_FAILED; @@ -2212,66 +2269,66 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids if (!jni_obj_filterList) { OIC_LOG(ERROR, TAG, "ArrayList: jni_obj_filterList is null"); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_arrayList); (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); return CA_STATUS_FAILED; } (*env)->DeleteLocalRef(env, jni_cid_arrayList); - jboolean jni_bool_arrayListIsAdded = (*env)->CallBooleanMethod(env, jni_obj_filterList, - jni_mid_arrayListAdd, - jni_obj_scanfilter); - if (!jni_bool_arrayListIsAdded) + jboolean jni_bool_arrayListIsAdded; + for (i = 0; i < g_serviceUuidCount; i++) { - OIC_LOG(ERROR, TAG, "ArrayList: jni_bool_arrayListIsAdded is null"); - (*env)->DeleteLocalRef(env, jni_obj_filterList); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); - (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); - - jni_bool_arrayListIsAdded = (*env)->CallBooleanMethod(env, jni_obj_filterList, + jni_bool_arrayListIsAdded = (*env)->CallBooleanMethod(env, jni_obj_filterList, jni_mid_arrayListAdd, - jni_obj_scanfilter2); - if (!jni_bool_arrayListIsAdded) - { - OIC_LOG(ERROR, TAG, "ArrayList: jni_bool_arrayListIsAdded is null"); - (*env)->DeleteLocalRef(env, jni_obj_filterList); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter2); - (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); - return CA_STATUS_FAILED; + jni_obj_servicescanfilter[i]); + if (!jni_bool_arrayListIsAdded) + { + OIC_LOG(ERROR, TAG, "ArrayList: jni_bool_arrayListIsAdded is null"); + (*env)->DeleteLocalRef(env, jni_obj_filterList); + for(j = i; j < g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for(j = 0; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } + (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); + return CA_STATUS_FAILED; + } + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[i]); + OIC_LOG_V(INFO, TAG, "%d st/nd/th service uuid based scanFilters Added", i + 1); } - (*env)->DeleteLocalRef(env, jni_obj_scanfilter2); - jni_bool_arrayListIsAdded = (*env)->CallBooleanMethod(env, jni_obj_filterList, - jni_mid_arrayListAdd, - jni_obj_scanfilter3); - if (!jni_bool_arrayListIsAdded) + for (i = 0; i < g_manufactureDataCount; i++) { - OIC_LOG(ERROR, TAG, "ArrayList: jni_bool_arrayListIsAdded is null"); - (*env)->DeleteLocalRef(env, jni_obj_filterList); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter3); - (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_obj_scanfilter3); - - jni_bool_arrayListIsAdded = (*env)->CallBooleanMethod(env, jni_obj_filterList, + jni_bool_arrayListIsAdded = (*env)->CallBooleanMethod(env, jni_obj_filterList, jni_mid_arrayListAdd, - jni_obj_scanfilter4); - if (!jni_bool_arrayListIsAdded) - { - OIC_LOG(ERROR, TAG, "ArrayList: jni_bool_arrayListIsAdded is null"); - (*env)->DeleteLocalRef(env, jni_obj_filterList); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter4); - (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); - return CA_STATUS_FAILED; + jni_obj_customscanfilter[i]); + if (!jni_bool_arrayListIsAdded) + { + OIC_LOG(ERROR, TAG, "ArrayList: jni_bool_arrayListIsAdded is null"); + (*env)->DeleteLocalRef(env, jni_obj_filterList); + for(j = i; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } + (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); + return CA_STATUS_FAILED; + } + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[i]); + OIC_LOG_V(INFO, TAG, "%d st/nd/th manufacture data based scanFilters Added", i + 1); } - (*env)->DeleteLocalRef(env, jni_obj_scanfilter4); - OIC_LOG(INFO, TAG, "ScanFilters Added"); + OIC_LOG(INFO, TAG, "All ScanFilters Added"); // get ScanSettings.SCAN_MODE_BALANCED jint value jint jni_int_scanBalancedMode = CALEGetConstantsValue(env, CLASSPATH_LE_SCANSETTINGS, "SCAN_MODE_BALANCED");