CAResult_t CAEDRServerStartAcceptThread() { bool isAttached = false; JNIEnv* env = NULL; jint res = (*g_jvm)->GetEnv(g_jvm, (void**) &env, JNI_VERSION_1_6); if (JNI_OK != res) { OIC_LOG(DEBUG, TAG, "Could not get JNIEnv pointer"); res = (*g_jvm)->AttachCurrentThread(g_jvm, &env, NULL); if (JNI_OK != res) { OIC_LOG(ERROR, TAG, "AttachCurrentThread failed"); return CA_STATUS_FAILED; } isAttached = true; } jstring jni_address = CAEDRNativeGetLocalDeviceAddress(env); if (jni_address) { const char* localAddress = (*env)->GetStringUTFChars(env, jni_address, NULL); OIC_LOG_V(DEBUG, TAG, "My BT Address is %s", localAddress); (*env)->ReleaseStringUTFChars(env, jni_address, localAddress); } oc_mutex_lock(g_mutexStateList); CAEDRNativeCreateDeviceStateList(); oc_mutex_unlock(g_mutexStateList); oc_mutex_lock(g_mutexObjectList); CAEDRNativeCreateDeviceSocketList(); oc_mutex_unlock(g_mutexObjectList); if (isAttached) { (*g_jvm)->DetachCurrentThread(g_jvm); } CAAdapterReceiveThreadContext_t *ctx = (CAAdapterReceiveThreadContext_t *) OICMalloc( sizeof(CAAdapterReceiveThreadContext_t)); if (!ctx) { OIC_LOG(ERROR, TAG, "Out of memory!"); return CA_MEMORY_ALLOC_FAILED; } ctx->stopFlag = &g_stopAccept; if (CA_STATUS_OK != ca_thread_pool_add_task(g_threadPoolHandle, CAAcceptHandler, (void *) ctx, NULL)) { OIC_LOG(ERROR, TAG, "Failed to create read thread!"); OICFree((void *) ctx); return CA_STATUS_FAILED; } return CA_STATUS_OK; }
void CAEDRInitialize(ca_thread_pool_t handle) { OIC_LOG(DEBUG, TAG, "CAEDRInitialize"); g_threadPoolHandle = handle; CAEDRCoreJniInit(); CAEDRJniInitContext(); // init mutex CAEDRCreateMutex(); bool isAttached = false; JNIEnv* env; jint res = (*g_jvm)->GetEnv(g_jvm, (void**) &env, JNI_VERSION_1_6); if (JNI_OK != res) { OIC_LOG(DEBUG, TAG, "CAEDRInitialize - Could not get JNIEnv pointer"); res = (*g_jvm)->AttachCurrentThread(g_jvm, &env, NULL); if (JNI_OK != res) { OIC_LOG(ERROR, TAG, "AttachCurrentThread failed"); return; } isAttached = true; } jstring jni_address = CAEDRNativeGetLocalDeviceAddress(env); if (jni_address) { const char* localAddress = (*env)->GetStringUTFChars(env, jni_address, NULL); OIC_LOG_V(DEBUG, TAG, "My BT Address is %s", localAddress); (*env)->ReleaseStringUTFChars(env, jni_address, localAddress); } ca_mutex_lock(g_mutexStateList); CAEDRNativeCreateDeviceStateList(); ca_mutex_unlock(g_mutexStateList); ca_mutex_lock(g_mutexObjectList); CAEDRNativeCreateDeviceSocketList(); ca_mutex_unlock(g_mutexObjectList); if (isAttached) { (*g_jvm)->DetachCurrentThread(g_jvm); } if (g_context) { CAEDRCreateJNIInterfaceObject(g_context); /* create java CaEdrInterface instance*/ } OIC_LOG(DEBUG, TAG, "OUT"); }
void CAEDRInitialize(u_thread_pool_t handle) { OIC_LOG(DEBUG, TAG, "CAEDRInitialize"); g_threadPoolHandle = handle; // init mutex CAEDRCreateMutex(); jboolean isAttached = JNI_FALSE; JNIEnv* env; jint res = (*g_jvm)->GetEnv(g_jvm, (void**)&env, JNI_VERSION_1_6); if(res != JNI_OK) { OIC_LOG(DEBUG, TAG, "CAEDRInitialize - Could not get JNIEnv pointer"); res = (*g_jvm)->AttachCurrentThread(g_jvm, &env, NULL); if(res != JNI_OK) { OIC_LOG(DEBUG, TAG, "AttachCurrentThread failed"); return; } isAttached = JNI_TRUE; } jstring jni_address = CAEDRNativeGetLocalDeviceAddress(env); if(jni_address) { const char* localAddress = (*env)->GetStringUTFChars(env, jni_address, NULL); OIC_LOG_V(DEBUG, TAG, "My BT Address is %s", localAddress); } CAEDRNativeCreateDeviceStateList(); CAEDRNativeCreateDeviceSocketList(); if(isAttached) (*g_jvm)->DetachCurrentThread(g_jvm); // CAEDRCreateJNIInterfaceObject(gContext); /* create java CAEDRInterface instance*/ OIC_LOG(DEBUG, TAG, "OUT"); }