replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / android / android_api / base / jni / JniCaInterface.c
index bf52544..2a7861b 100644 (file)
@@ -35,6 +35,8 @@
 static jobject g_foundDeviceListenerObject = NULL;
 static jobject g_listenerObject = NULL;
 static JavaVM *g_jvm = NULL;
+static jclass g_jni_cls_enum = NULL;
+static jmethodID g_jni_mid_enum = NULL;
 
 JNIEXPORT jint JNI_OnLoad(JavaVM *jvm, void *reserved)
 {
@@ -118,27 +120,15 @@ void CAManagerConnectionStateChangedCB(const CAEndpoint_t *info,
         goto exit_error;
     }
 
-    jclass jni_cls_enum = (*env)->FindClass(env, "org/iotivity/base/OcConnectivityType");
-    if (!jni_cls_enum)
+    if (g_jni_cls_enum && g_jni_mid_enum)
     {
-        LOGE("could not get jni_cls_enum");
-        goto exit_error;
-    }
-
-    jmethodID jni_mid_enum = (*env)->GetStaticMethodID(env, jni_cls_enum, "getInstance",
-                                                       "(I)Lorg/iotivity/base/OcConnectivityType;");
-    if (!jni_mid_enum)
-    {
-        LOGE("could not get Method ID (getInstance)");
-        goto exit_error;
+        jobject jni_adaptertype = (*env)->CallStaticObjectMethod(env, g_jni_cls_enum,
+                                                                 g_jni_mid_enum, info->adapter);
+        (*env)->CallVoidMethod(env, g_listenerObject, jni_mid_listener,
+                               jni_adaptertype, jni_address,
+                               (jboolean)connected);
     }
 
-    jobject jni_adaptertype = (*env)->CallStaticObjectMethod(env, jni_cls_enum,
-                                                             jni_mid_enum, info->adapter);
-    (*env)->CallVoidMethod(env, g_listenerObject, jni_mid_listener,
-                           jni_adaptertype, jni_address,
-                           (jboolean)connected);
-
 exit_error:
     if (isAttached)
     {
@@ -191,27 +181,15 @@ void CAManagerAdapterStateChangedCB(CATransportAdapter_t adapter, bool enabled)
         goto exit_error;
     }
 
-    jclass jni_cls_enum = (*env)->FindClass(env, "org/iotivity/base/OcConnectivityType");
-    if (!jni_cls_enum)
+    if (g_jni_cls_enum && g_jni_mid_enum)
     {
-        LOGE("could not get jni_cls_enum");
-        goto exit_error;
-    }
+        jobject jni_adaptertype = (*env)->CallStaticObjectMethod(env, g_jni_cls_enum,
+                                                                 g_jni_mid_enum, adapter);
 
-    jmethodID jni_mid_enum = (*env)->GetStaticMethodID(env, jni_cls_enum, "getInstance",
-                                                       "(I)Lorg/iotivity/base/OcConnectivityType;");
-    if (!jni_mid_enum)
-    {
-        LOGE("could not get Method ID (getInstance)");
-        goto exit_error;
+        (*env)->CallVoidMethod(env, g_listenerObject, jni_mid_listener,
+                               jni_adaptertype, (jboolean)enabled);
     }
 
-    jobject jni_adaptertype = (*env)->CallStaticObjectMethod(env, jni_cls_enum,
-                                                             jni_mid_enum, adapter);
-
-    (*env)->CallVoidMethod(env, g_listenerObject, jni_mid_listener,
-                           jni_adaptertype, (jboolean)enabled);
-
 exit_error:
     if (isAttached)
     {
@@ -228,8 +206,25 @@ Java_org_iotivity_ca_CaInterface_caManagerInitialize(JNIEnv *env, jclass clazz,
 
     CAUtilClientInitialize(env, g_jvm, context);
 
-    g_listenerObject = (*env)->NewGlobalRef(env, listener);
+    if (listener)
+    {
+        g_listenerObject = (*env)->NewGlobalRef(env, listener);
+    }
+
+    if (g_listenerObject)
+    {
+        jclass cls = (*env)->FindClass(env, "org/iotivity/base/OcConnectivityType");
+        if (cls)
+        {
+            g_jni_cls_enum = (jclass)(*env)->NewGlobalRef(env, cls);
+        }
 
+        if (g_jni_cls_enum)
+        {
+            g_jni_mid_enum = (*env)->GetStaticMethodID(env, g_jni_cls_enum, "getInstance",
+                                                   "(I)Lorg/iotivity/base/OcConnectivityType;");
+        }
+    }
     CARegisterNetworkMonitorHandler(CAManagerAdapterStateChangedCB,
                                     CAManagerConnectionStateChangedCB);
 }
@@ -246,6 +241,12 @@ Java_org_iotivity_ca_CaInterface_caManagerTerminate(JNIEnv *env, jclass clazz)
         (*env)->DeleteGlobalRef(env, g_listenerObject);
         g_listenerObject = NULL;
     }
+
+    if (g_jni_cls_enum)
+    {
+        (*env)->DeleteGlobalRef(env, g_jni_cls_enum);
+        g_jni_cls_enum = NULL;
+    }
 }
 
 JNIEXPORT void JNICALL
@@ -254,6 +255,11 @@ Java_org_iotivity_ca_CaInterface_caManagerSetAutoConnectionDeviceInfo(JNIEnv *en
                                                                       jstring jaddress)
 {
     LOGI("CaManager_setAutoConnectionDeviceInfo");
+    if (!jaddress)
+    {
+        LOGE("jaddress is null");
+        return;
+    }
 
     const char* address = (*env)->GetStringUTFChars(env, jaddress, NULL);
     if (!address)
@@ -273,6 +279,11 @@ Java_org_iotivity_ca_CaInterface_caManagerUnsetAutoConnectionDeviceInfo(JNIEnv *
                                                                         jstring jaddress)
 {
     LOGI("CaManager_unsetAutoConnectionDeviceInfo");
+    if (!jaddress)
+    {
+        LOGE("jaddress is null");
+        return;
+    }
 
     const char* address = (*env)->GetStringUTFChars(env, jaddress, NULL);
     if (!address)
@@ -345,3 +356,84 @@ Java_org_iotivity_ca_CaInterface_setLeScanIntervalTimeImpl(JNIEnv *env, jclass c
     CAUtilSetLEScanInterval(intervalTime, workignCount);
 }
 
+JNIEXPORT void JNICALL
+Java_org_iotivity_ca_CaInterface_stopLeScanImpl(JNIEnv *env, jclass clazz)
+{
+    LOGI("stopLeScan");
+    (void)env;
+    (void)clazz;
+    CAUtilStopLEScan();
+}
+
+JNIEXPORT void JNICALL
+Java_org_iotivity_ca_CaInterface_startLeAdvertisingImpl(JNIEnv *env, jclass clazz)
+{
+    LOGI("startLeAdvertising");
+    (void)env;
+    (void)clazz;
+    CAUtilStartLEAdvertising();
+}
+
+JNIEXPORT void JNICALL
+Java_org_iotivity_ca_CaInterface_stopLeAdvertisingImpl(JNIEnv *env, jclass clazz)
+{
+    LOGI("stopLeAdvertising");
+    (void)env;
+    (void)clazz;
+    CAUtilStopLEAdvertising();
+}
+
+JNIEXPORT void JNICALL
+Java_org_iotivity_ca_CaInterface_setBTConfigureImpl(JNIEnv *env, jclass clazz, jint flag)
+{
+    LOGI("setConfigureImpl");
+    (void)env;
+    (void)clazz;
+    CAUtilConfig_t configs = {(CATransportBTFlags_t)flag};
+    CAUtilSetBTConfigure(configs);
+}
+
+JNIEXPORT jint JNICALL Java_org_iotivity_ca_CaInterface_setCipherSuiteImpl
+  (JNIEnv *env, jclass clazz, jint cipherSuite, jint adapter)
+{
+    LOGI("setCipherSuiteImpl");
+    (void)env;
+    (void)clazz;
+    CAResult_t ret = CASelectCipherSuite(cipherSuite, (CATransportAdapter_t) adapter);
+    if (CA_STATUS_OK != ret)
+    {
+        LOGE("CASelectCipherSuite has failed");
+    }
+    return ret;
+}
+
+JNIEXPORT jint JNICALL Java_org_iotivity_ca_CaInterface_disconnectTCPSessionImpl
+ (JNIEnv *env, jclass clazz, jstring address, jint port, jint transportFlags)
+{
+    LOGI("disconnectTCPSessionImpl");
+    (void)env;
+    (void)clazz;
+
+    if(!address)
+    {
+        LOGE("Java address is null");
+        return CA_STATUS_INVALID_PARAM;
+    }
+
+    //convert java string to native string
+    const char* nativeAddress = (*env)->GetStringUTFChars(env, address, NULL);
+    if (!nativeAddress)
+    {
+        LOGE("Native address is null");
+        return CA_STATUS_INVALID_PARAM;
+    }
+
+    CAResult_t result = CAUtilTCPDisconnectSession(nativeAddress, (int)port,
+                                            (CATransportFlags_t)transportFlags);
+    if (CA_STATUS_OK != result)
+    {
+        LOGE("disconnectTCPSessionImpl failed");
+    }
+    return result;
+}
+