From 0bbf6b9c263c19934f1ac278f0f4ab2e68f677b6 Mon Sep 17 00:00:00 2001 From: Emeric Vigier <emeric.vigier@savoirfairelinux.com> Date: Tue, 11 Sep 2012 15:33:49 -0400 Subject: [PATCH] #15414: remove original JNI calls before swig implementation comes --- daemon/src/managerimpl.cpp | 382 --------------------------------- daemon/src/sip/sipvoiplink.cpp | 3 +- 2 files changed, 2 insertions(+), 383 deletions(-) diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp index 7a376ad1c4..2b64814f63 100644 --- a/daemon/src/managerimpl.cpp +++ b/daemon/src/managerimpl.cpp @@ -91,13 +91,8 @@ #include <sstream> #include <sys/types.h> // mkdir(2) #include <sys/stat.h> // mkdir(2) -#include "com_savoirfairelinux_sflphone_client_ManagerImpl.h" -#include <android/native_activity.h> -static JavaVM *gJavaVM; static jobject gManagerObject, gDataObject; -const char *kManagerPath = "com/savoirfairelinux/sflphone/client/ManagerImpl"; -const char *kDataPath = "com/savoirfairelinux/sflphone/client/Data"; ManagerImpl::ManagerImpl() : preferences(), voipPreferences(), addressbookPreference(), @@ -117,49 +112,6 @@ ManagerImpl::ManagerImpl() : srand(time(NULL)); } -static std::string getAppPath() { - JNIEnv *env; - int status; - bool isAttached = false; - std::string path; - - status = gJavaVM->GetEnv((void **) &env, JNI_VERSION_1_6); - if (status < 0) { - WARN("getAppPath: failed to get JNI environment, assuming native thread"); - status = gJavaVM->AttachCurrentThread(&env, NULL); - if (status < 0) { - ERROR("getAppPath: failed to attach current thread"); - return; - } - isAttached = true; - } - - jclass managerImplClass = env->GetObjectClass(gManagerObject); - if (!managerImplClass) { - ERROR("getAppPath: failed to get class reference"); - if(isAttached) - gJavaVM->DetachCurrentThread(); - return; - } - - /* Find the callBack method ID */ - jmethodID method = env->GetStaticMethodID(managerImplClass, "getAppPath", "()Ljava/lang/String;"); - if (!method) { - ERROR("getAppPath: failed to get callBack method ID"); - if(isAttached) - gJavaVM->DetachCurrentThread(); - return; - } - - jstring jstr = env->CallStaticObjectMethod(managerImplClass, method); - if (isAttached) { - gJavaVM->DetachCurrentThread(); - isAttached = false; - } - path = env->GetStringUTFChars(jstr, NULL); - return path; -} - static void incoming_call(const std::string& accountID, const std::string& callID, const std::string& from) { int status; JNIEnv *env; @@ -212,36 +164,6 @@ end: return; } -JNIEXPORT void JNICALL Java_com_savoirfairelinux_sflphone_client_ManagerImpl_answerCall -(JNIEnv *env, jclass cls, jstring jcallID) { - const char *callID; - - callID = env->GetStringUTFChars(jcallID, 0); - - DEBUG("CallManager::answerCall(%s)", callID); - Manager::instance().answerCall(callID); - - /* release string */ - env->ReleaseStringUTFChars(jcallID, callID); - - return; -} - -JNIEXPORT void JNICALL Java_com_savoirfairelinux_sflphone_client_ManagerImpl_refuseCall -(JNIEnv *env, jclass cls, jstring jcallID) { - const char *callID; - - callID = env->GetStringUTFChars(jcallID, 0); - - DEBUG("CallManager::refuseCall(%s)", callID); - Manager::instance().refuseCall(callID); - - /* release string */ - env->ReleaseStringUTFChars(jcallID, callID); - - return; -} - static void callback_handler(char *s) { int status; JNIEnv *env; @@ -357,224 +279,6 @@ JNIEXPORT jstring JNICALL Java_com_savoirfairelinux_sflphone_client_ManagerImpl_ return dataStringValue; } -JNIEXPORT void JNICALL Java_com_savoirfairelinux_sflphone_client_ManagerImpl_placeCall -(JNIEnv *env, jclass cls, jstring jaccountID, jstring jcallID, jstring jto) { - const char *accountID, *callID, *to; - - INFO("placeCall"); - - accountID = env->GetStringUTFChars(jaccountID, 0); - callID = env->GetStringUTFChars(jcallID, 0); - to = env->GetStringUTFChars(jto, 0); - - DEBUG("CallManager::placeCall(%s, %s, %s)", accountID, callID, to); - Manager::instance().outgoingCall(accountID, callID, to); - - /* release string */ - env->ReleaseStringUTFChars(jaccountID, accountID); - env->ReleaseStringUTFChars(jcallID, callID); - env->ReleaseStringUTFChars(jto, to); - - return; -} - -JNIEXPORT void JNICALL Java_com_savoirfairelinux_sflphone_client_ManagerImpl_hangUp -(JNIEnv *env, jclass cls, jstring jcallID) { - const char *callID; - - INFO("hangUp"); - - callID = env->GetStringUTFChars(jcallID, 0); - - DEBUG("CallManager::hangup(%s)", callID); - Manager::instance().hangupCall(callID); - - /* release string */ - env->ReleaseStringUTFChars(jcallID, callID); - - return; -} - -void initClassHelper(JNIEnv *env, const char *path, jobject *objptr) { - jclass cls; - - INFO("initClassHelper"); - - cls= env->FindClass(path); - if(!cls) { - ERROR("initClassHelper: failed to get %s class reference", path); - return; - } - jmethodID constr = env->GetMethodID(cls, "<init>", "()V"); - INFO("initClassHelper: %s method found", path); - - if(!constr) { - ERROR("initClassHelper: failed to get %s constructor", path); - return; - } - jobject obj = env->NewObject(cls, constr); - INFO("initClassHelper: %s constructor found", path); - - if(!obj) { - ERROR("initClassHelper: failed to create a %s object", path); - return; - } - /* protect cached object instances from Android GC */ - (*objptr) = env->NewGlobalRef(obj); - INFO("initClassHelper: object found %x", objptr); -} - -void deinitClassHelper(JNIEnv *env, jobject obj) { - INFO("deinitClassHelper"); - - /* delete cached object instances */ - env->DeleteGlobalRef(obj); - INFO("deinitClassHelper: object %x deleted", obj); -} - -JNINativeMethod methods[] = -{ - /* - * name, - * signature, - * funcPtr - */ - { - "initN", - "(Ljava/lang/String;)V", - (void *) Java_com_savoirfairelinux_sflphone_client_ManagerImpl_initN - }, - { - "callVoid", - "()V", - (void *) Java_com_savoirfairelinux_sflphone_client_ManagerImpl_callVoid - }, - { - "getNewData", - "(ILjava/lang/String;)Lcom/savoirfairelinux/sflphone/client/Data;", - (void *) Java_com_savoirfairelinux_sflphone_client_ManagerImpl_getNewData - }, - { - "getDataString", - "(Lcom/savoirfairelinux/sflphone/client/Data;)Ljava/lang/String;", - (void *) Java_com_savoirfairelinux_sflphone_client_ManagerImpl_getDataString - }, - { - "placeCall", - "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", - (void *) Java_com_savoirfairelinux_sflphone_client_ManagerImpl_placeCall - } -}; - -jint JNI_OnLoad(JavaVM* vm, void* reserved) -{ - JNIEnv* env; - jclass clazz; - int numMethods = sizeof(methods) / sizeof(methods[0]); - - INFO("JNI_OnLoad"); - - /* get env */ - if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) { - ERROR("JNI_OnLoad: failed to get the environment using GetEnv()"); - return -1; - } - INFO("JNI_Onload: GetEnv %p", env); - - /* cache VM object as it won't change in near future */ - gJavaVM = vm; - INFO("JNI_Onload: JavaVM %p", gJavaVM); - - /* Get jclass with env->FindClass */ - clazz = env->FindClass(kManagerPath); - if (!clazz) { - ERROR("JNI_Onload: whoops, %s class not found!", kManagerPath); - } - - /* put instances of class object we need into cache */ - initClassHelper(env, kManagerPath, &gManagerObject); - initClassHelper(env, kDataPath, &gDataObject); - - if(env->RegisterNatives(clazz, methods, numMethods) != JNI_OK) - { - ERROR("JNI_Onload: Failed to register native methods"); - return -1; - } - - INFO("JNI_Onload: Native functions registered"); - - return JNI_VERSION_1_6; -} - -void JNI_OnUnLoad(JavaVM* vm, void* reserved) -{ - JNIEnv* env; - jclass clazz; - - INFO("JNI_OnUnLoad"); - - /* get env */ - if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) { - ERROR("JNI_OnUnLoad: failed to get the environment using GetEnv()"); - return; - } - INFO("JNI_OnUnLoad: GetEnv %p", env); - - /* Get jclass with env->FindClass */ - clazz = env->FindClass(kManagerPath); - if (!clazz) { - ERROR("JNI_OnUnLoad: whoops, %s class not found!", kManagerPath); - } - - /* put instances of class object we need into cache */ - deinitClassHelper(env, gManagerObject); - deinitClassHelper(env, gDataObject); - - env->UnregisterNatives(clazz); - INFO("JNI_OnUnLoad: Native functions unregistered"); -} - -int ManagerImpl::getSipLogLevel() { - JNIEnv *env; - int status; - bool isAttached = false; - - status = gJavaVM->GetEnv((void **) &env, JNI_VERSION_1_6); - if (status < 0) { - WARN("getSipLogLevel: failed to get JNI environment, assuming native thread"); - status = gJavaVM->AttachCurrentThread(&env, NULL); - if (status < 0) { - ERROR("getSipLogLevel: failed to attach current thread"); - return 6; - } - isAttached = true; - } - - jclass managerImplClass = env->GetObjectClass(gManagerObject); - if (!managerImplClass) { - ERROR("getSipLogLevel: failed to get class reference"); - if(isAttached) - gJavaVM->DetachCurrentThread(); - return 6; - } - - /* Find the callBack method ID */ - jmethodID method = env->GetStaticMethodID(managerImplClass, "getSipLogLevel", "()I"); - if (!method) { - ERROR("getSipLogLevel: failed to get callBack method ID"); - if(isAttached) - gJavaVM->DetachCurrentThread(); - return 6; - } - - int level = (int) env->CallStaticIntMethod(managerImplClass, method); - if (isAttached) { - gJavaVM->DetachCurrentThread(); - isAttached = false; - } - return level; -} - void ManagerImpl::init(const std::string &config_file) { path_ = config_file.empty() ? retrieveConfigPath() : config_file; @@ -612,92 +316,6 @@ void ManagerImpl::init(const std::string &config_file) registerAccounts(); } -JNIEXPORT void JNICALL Java_com_savoirfairelinux_sflphone_client_ManagerImpl_initN - (JNIEnv *jenv, jclass obj, jstring jconfig_file) -{ - char *config_file, *str; - jmethodID getAppPath; - jobject appPath; - int status; - JNIEnv *env; - bool isAttached = false; - jclass managerImplClass; - - DEBUG("initN"); - - // FIXME - status = gJavaVM->GetEnv((void **) &env, JNI_VERSION_1_6); - if (status < 0) { - WARN("initN: failed to get JNI environment, assuming native thread"); - status = gJavaVM->AttachCurrentThread(&env, NULL); - if (status < 0) { - ERROR("initN: failed to attach current thread"); - return; - } - isAttached = true; - } - - config_file = env->GetStringUTFChars(jconfig_file, 0); - if (!config_file) { - ERROR("initN: whoops, config_file is null!"); - goto end; - } - INFO("initN: config_file: %s", config_file); - - /* here we go: 20 lines of code to simply call a java method... JNI sucks... */ - managerImplClass = env->GetObjectClass(gManagerObject); - if (!managerImplClass) { - ERROR("initN: failed to get ManagerImpl class"); - goto release_config; - } - - /* get the getAppPath method defined in java */ - getAppPath = env->GetStaticMethodID(managerImplClass, "getAppPath", "()Ljava/lang/String;"); - if (!getAppPath) { - ERROR("initN: whoops, getAppPath method not found!"); - goto release_config; - } - DEBUG("initN: getAppPath method found"); - - /* call getAppPath method */ - appPath = env->CallStaticObjectMethod(obj, getAppPath); - if (!appPath) { - ERROR("initN: whoops, getAppPath cannot be called!"); - goto release_config; - } - DEBUG("initN: getAppPath returned"); - - /* convert it to c++ string */ - str = env->GetStringUTFChars((jstring) appPath, NULL); - if (!str) { - ERROR("initN: whoops, appPath is null!"); - goto release_config; - } - INFO("initN: Application path: %s", str); - - DEBUG("initN: creating manager"); - DEBUG("initN: setting application path"); - Manager::instance().setPath(str); - DEBUG("initN: initializing manager"); - Manager::instance().init(config_file); - - /* release string */ -release_str: - env->ReleaseStringUTFChars(appPath, str); -release_config: - env->ReleaseStringUTFChars(jconfig_file, config_file); - -end: - /* detach current thread */ - if (isAttached) { - gJavaVM->DetachCurrentThread(); - isAttached = false; - } - - INFO("initN: End"); - return; -} - void ManagerImpl::setPath(const std::string &path) { history_.setPath(path); } diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp index 424f5c350a..794f1fcadd 100644 --- a/daemon/src/sip/sipvoiplink.cpp +++ b/daemon/src/sip/sipvoiplink.cpp @@ -606,7 +606,8 @@ void SIPVoIPLink::setSipLogLevel() } #ifdef ANDROID - level = Manager::instance().getSipLogLevel(); + /* level = Manager::instance().getSipLogLevel(); */ + level = 6; #endif // From 0 (min) to 6 (max) -- GitLab