void brlapi_protocolExceptionInit(brlapi_handle_t *handle) { #ifndef WINDOWS if (pthread_once && pthread_key_create) #endif /* WINDOWS */ pthread_once(&brlapi_protocolExceptionOnce, do_brlapi_protocolExceptionInit); brlapi__setExceptionHandler(handle, &brlapi_pythonExceptionHandler); }
JNIEXPORT jint JNICALL Java_org_a11y_BrlAPI_Native_openConnection(JNIEnv *jenv, jobject jobj, jobject JclientSettings , jobject JusedSettings) { jclass jcclientSettings, jcusedSettings; jfieldID clientAuthID = NULL, clientHostID = NULL, usedAuthID, usedHostID; brlapi_connectionSettings_t clientSettings, usedSettings, *PclientSettings, *PusedSettings; int result; jstring auth = NULL, host = NULL; const char *str; jfieldID handleID; brlapi_handle_t *handle; jclass jcls; GET_CLASS(jenv, jcls, jobj, -1); GET_ID(jenv, handleID, jcls, "handle", "J", -1); handle = malloc(brlapi_getHandleSize()); if (!handle) { ThrowException(jenv, ERR_OUTOFMEM, __func__); return -1; } (*jenv)->SetLongField(jenv, jobj, handleID, (jlong) (intptr_t) handle); env = jenv; if (JclientSettings) { GET_CLASS(jenv, jcclientSettings, JclientSettings, -1); GET_ID(jenv, clientAuthID, jcclientSettings, "auth", "Ljava/lang/String;", -1); GET_ID(jenv, clientHostID, jcclientSettings, "host", "Ljava/lang/String;", -1); PclientSettings = &clientSettings; if ((auth = (*jenv)->GetObjectField(jenv, JclientSettings, clientAuthID))) { if (!(clientSettings.auth = (char *)(*jenv)->GetStringUTFChars(jenv, auth, NULL))) { ThrowException(jenv, ERR_OUTOFMEM, __func__); return -1; } } else clientSettings.auth = NULL; if ((host = (*jenv)->GetObjectField(jenv, JclientSettings, clientHostID))) { if (!(clientSettings.host = (char *)(*jenv)->GetStringUTFChars(jenv, host, NULL))) { ThrowException(jenv, ERR_OUTOFMEM, __func__); return -1; } } else clientSettings.host = NULL; } else PclientSettings = NULL; if (JusedSettings) PusedSettings = &usedSettings; else PusedSettings = NULL; if ((result = brlapi__openConnection(handle, PclientSettings, PusedSettings)) < 0) { ThrowError(jenv, __func__); return -1; } (void) brlapi__setExceptionHandler(handle, exceptionHandler); if (JclientSettings) { if (clientSettings.auth) (*jenv)->ReleaseStringUTFChars(jenv, auth, clientSettings.auth); if (clientSettings.host) (*jenv)->ReleaseStringUTFChars(jenv, host, clientSettings.host); } if (PusedSettings) { GET_CLASS(jenv, jcusedSettings, JusedSettings, -1); GET_ID(jenv, usedAuthID, jcusedSettings, "auth", "Ljava/lang/String;", -1); GET_ID(jenv, usedHostID, jcusedSettings, "host", "Ljava/lang/String;", -1); auth = (*jenv)->NewStringUTF(jenv, usedSettings.auth); if (!auth) { ThrowException(jenv, ERR_OUTOFMEM, __func__); return -1; } str = (*jenv)->GetStringUTFChars(jenv, auth, NULL); (*jenv)->SetObjectField(jenv, JusedSettings, clientAuthID, auth); (*jenv)->ReleaseStringUTFChars(jenv, auth, str); host = (*jenv)->NewStringUTF(jenv, usedSettings.host); if (!host) { ThrowException(jenv, ERR_OUTOFMEM, __func__); return -1; } str = (*jenv)->GetStringUTFChars(jenv, host, NULL); (*jenv)->SetObjectField(jenv, JusedSettings, clientHostID, host); (*jenv)->ReleaseStringUTFChars(jenv, host, str); } return (jint) result; }