added CA interface to monitoring network status for android ble.
authorjihwan.seo <jihwan.seo@samsung.com>
Wed, 17 Feb 2016 22:50:15 +0000 (07:50 +0900)
committerJon A. Cruz <jonc@osg.samsung.com>
Wed, 2 Mar 2016 03:58:25 +0000 (03:58 +0000)
add new CA interface for network status changes delivery to android
for ble connection manager

Change-Id: I21d5e1d134fc09fc38cb7e3706fc628f6e18a039
Signed-off-by: jihwan.seo <jihwan.seo@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/5029
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Jaehong Jo <jaehong.jo@samsung.com>
Reviewed-by: Tim Kourt <tim.a.kourt@intel.com>
Reviewed-by: Jon A. Cruz <jonc@osg.samsung.com>
android/android_api/base/jni/Android.mk
android/android_api/base/jni/JniCaInterface.c
android/android_api/base/jni/JniCaInterface.h
android/android_api/base/src/main/java/org/iotivity/base/OcConnectivityType.java
android/android_api/base/src/main/java/org/iotivity/ca/CaInterface.java
resource/csdk/connectivity/api/cautilinterface.h
resource/csdk/connectivity/util/inc/camanagerleinterface.h
resource/csdk/connectivity/util/src/cautilinterface.c

index e07b671..3b7fdf1 100644 (file)
@@ -1,6 +1,6 @@
 LOCAL_PATH := $(call my-dir)\r
 TARGET_ARCH_ABI := $(APP_ABI)\r
-SECURED := $(SECURE)
+SECURED := $(SECURE)\r
 \r
 include $(CLEAR_VARS)\r
 OIC_LIB_PATH := ../../../../out/android/$(APP_ABI)/$(APP_OPTIM)\r
@@ -26,20 +26,20 @@ LOCAL_MODULE := libandroid-ca
 LOCAL_SRC_FILES := $(OIC_LIB_PATH)/libconnectivity_abstraction.so\r
 include $(PREBUILT_SHARED_LIBRARY)\r
 \r
-ifeq ($(SECURED), 1)
-include $(CLEAR_VARS)
-OIC_LIB_PATH := ../../../../out/android/$(APP_ABI)/$(APP_OPTIM)
-LOCAL_MODULE := libandroid-ocprovision
-LOCAL_SRC_FILES := $(OIC_LIB_PATH)/libocprovision.a
-include $(PREBUILT_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-OIC_LIB_PATH := ../../../../out/android/$(APP_ABI)/$(APP_OPTIM)
-LOCAL_MODULE := libandroid-ocpmapi
-LOCAL_SRC_FILES := $(OIC_LIB_PATH)/libocpmapi.a
-include $(PREBUILT_STATIC_LIBRARY)
-endif
-
+ifeq ($(SECURED), 1)\r
+include $(CLEAR_VARS)\r
+OIC_LIB_PATH := ../../../../out/android/$(APP_ABI)/$(APP_OPTIM)\r
+LOCAL_MODULE := libandroid-ocprovision\r
+LOCAL_SRC_FILES := $(OIC_LIB_PATH)/libocprovision.a\r
+include $(PREBUILT_STATIC_LIBRARY)\r
+\r
+include $(CLEAR_VARS)\r
+OIC_LIB_PATH := ../../../../out/android/$(APP_ABI)/$(APP_OPTIM)\r
+LOCAL_MODULE := libandroid-ocpmapi\r
+LOCAL_SRC_FILES := $(OIC_LIB_PATH)/libocpmapi.a\r
+include $(PREBUILT_STATIC_LIBRARY)\r
+endif\r
+\r
 include $(CLEAR_VARS)\r
 OIC_SRC_PATH := ../../../resource\r
 LOCAL_MODULE := libca-interface\r
@@ -73,16 +73,16 @@ LOCAL_SRC_FILES :=  JniOcStack.cpp \
                     JniOcResourceResponse.cpp \\r
                     JniOcPlatform.cpp \\r
                     JniOcResource.cpp \\r
-                    JniOcResourceIdentifier.cpp \
-                    JniOcSecurity.cpp
-ifeq ($(SECURED), 1)
-LOCAL_SRC_FILES +=  JniOcSecureResource.cpp \
-                    JniOcProvisioning.cpp \
-                    JniSecureUtils.cpp \
-                    JniProvisionResultListner.cpp \
-                    JniPinCheckListener.cpp \
-                    JniDisplayPinListener.cpp
-endif
+                    JniOcResourceIdentifier.cpp \\r
+                    JniOcSecurity.cpp\r
+ifeq ($(SECURED), 1)\r
+LOCAL_SRC_FILES +=  JniOcSecureResource.cpp \\r
+                    JniOcProvisioning.cpp \\r
+                    JniSecureUtils.cpp \\r
+                    JniProvisionResultListner.cpp \\r
+                    JniPinCheckListener.cpp \\r
+                    JniDisplayPinListener.cpp\r
+endif\r
 \r
 LOCAL_LDLIBS := -llog\r
 LOCAL_STATIC_LIBRARIES := android-oc\r
@@ -91,24 +91,24 @@ LOCAL_STATIC_LIBRARIES += android-coap
 LOCAL_STATIC_LIBRARIES += android-oc_logger\r
 LOCAL_STATIC_LIBRARIES += android-ca\r
 LOCAL_STATIC_LIBRARIES += android_cpp11_compat\r
-ifeq ($(SECURED), 1)
-LOCAL_STATIC_LIBRARIES += android-ocprovision
-LOCAL_STATIC_LIBRARIES += android-ocpmapi
-endif
+ifeq ($(SECURED), 1)\r
+LOCAL_STATIC_LIBRARIES += android-ocprovision\r
+LOCAL_STATIC_LIBRARIES += android-ocpmapi\r
+endif\r
 \r
 LOCAL_CPPFLAGS += -std=c++0x\r
 LOCAL_CPP_FEATURES := rtti exceptions\r
 LOCAL_C_INCLUDES := $(OIC_SRC_PATH)/include\r
 LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/c_common\r
-LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/c_common/oic_string/include
-LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/c_common/oic_malloc/include
+LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/c_common/oic_string/include\r
+LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/c_common/oic_malloc/include\r
 LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/stack/include\r
 LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/ocsocket/include\r
 LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/oc_logger/include\r
 LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/../extlibs/boost/boost_1_58_0\r
 LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/../build_common/android/compatibility\r
-LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/security/provisioning/include
-LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/security/provisioning/include/oxm/
-LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/security/provisioning/include/internal
-LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/security/include
+LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/security/provisioning/include\r
+LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/security/provisioning/include/oxm/\r
+LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/security/provisioning/include/internal\r
+LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/security/include\r
 include $(BUILD_SHARED_LIBRARY)\r
index b9e12ce..6819f9d 100644 (file)
 #include <stdio.h>
 #include "cainterface.h"
 #include "JniCaInterface.h"
+#include "cautilinterface.h"
+#include "cacommon.h"
 
 #define  LOG_TAG   "JNI_CA_INTERFACE"
 #define  LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
 #define  LOGE(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
 
+static jobject g_listenerObject = NULL;
+static JavaVM *g_jvm = NULL;
+
 JNIEXPORT jint JNI_OnLoad(JavaVM *jvm, void *reserved)
 {
     LOGI("CaInterface_initialize");
+    g_jvm = jvm;
     CANativeJNISetJavaVM(jvm);
 
     return JNI_VERSION_1_6;
@@ -51,4 +57,218 @@ Java_org_iotivity_ca_CaInterface_initialize
 
     CANativeSetActivity(env, activity);
     CANativeJNISetContext(env, context);
-}
\ No newline at end of file
+}
+
+void CAManagerConnectionStateChangedCB(CATransportAdapter_t adapter,
+                                       const char *remote_address,
+                                       bool connected)
+{
+    LOGI("Callback - CAManagerConnectionStateChangedCB : type(%d), address(%s), connected(%d)",
+         adapter, remote_address, connected);
+
+    if (!g_listenerObject)
+    {
+        LOGE("g_listener is NULL, cannot have callback");
+        return;
+    }
+
+    bool isAttached = false;
+    JNIEnv* env;
+    jint res = (*g_jvm)->GetEnv(g_jvm, (void**) &env, JNI_VERSION_1_6);
+    if (JNI_OK != res)
+    {
+        LOGI("AttachCurrentThread will be called for JNIEnv pointer");
+        res = (*g_jvm)->AttachCurrentThread(g_jvm, &env, NULL);
+
+        if (JNI_OK != res)
+        {
+            LOGE("AttachCurrentThread has failed");
+            return;
+        }
+        isAttached = true;
+    }
+
+    jclass jni_cls_listener = (*env)->GetObjectClass(env, g_listenerObject);
+    if (!jni_cls_listener)
+    {
+        LOGE("could not get jni_cls_listener");
+        goto exit_error;
+    }
+
+    jmethodID jni_mid_listener = (*env)->GetMethodID(env, jni_cls_listener,
+                                                     "onConnectionStateChanged",
+                                                     "(Lorg/iotivity/base/OcConnectivityType;"
+                                                     "Ljava/lang/String;Z)V");
+    if (!jni_mid_listener)
+    {
+        LOGE("could not get Method ID");
+        goto exit_error;
+    }
+
+    jstring jni_address = (*env)->NewStringUTF(env, remote_address);
+    if (!jni_address)
+    {
+        LOGE("jni_address is null");
+        goto exit_error;
+    }
+
+    jclass jni_cls_enum = (*env)->FindClass(env, "org/iotivity/base/OcConnectivityType");
+    if (!jni_cls_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, jni_cls_enum,
+                                                             jni_mid_enum, adapter);
+    (*env)->CallVoidMethod(env, g_listenerObject, jni_mid_listener,
+                           jni_adaptertype, jni_address,
+                           (jboolean)connected);
+
+exit_error:
+    if (isAttached)
+    {
+        (*g_jvm)->DetachCurrentThread(g_jvm);
+    }
+
+    LOGI("OUT - CAManagerConnectionStateChangedCB");
+}
+
+void CAManagerAdapterStateChangedCB(CATransportAdapter_t adapter, bool enabled)
+{
+    LOGI("Callback - CAManagerAdapterStateChangedCB : type(%d), enabled(%d)",
+         adapter, enabled);
+
+    if (!g_listenerObject)
+    {
+        LOGE("g_listener is NULL, cannot have callback");
+        return;
+    }
+
+    bool isAttached = false;
+    JNIEnv* env;
+    jint res = (*g_jvm)->GetEnv(g_jvm, (void**) &env, JNI_VERSION_1_6);
+    if (JNI_OK != res)
+    {
+        LOGI("AttachCurrentThread will be called for JNIEnv pointer");
+        res = (*g_jvm)->AttachCurrentThread(g_jvm, &env, NULL);
+
+        if (JNI_OK != res)
+        {
+            LOGE("AttachCurrentThread has failed");
+            return;
+        }
+        isAttached = true;
+    }
+
+    jclass jni_cls_listener = (*env)->GetObjectClass(env, g_listenerObject);
+    if (!jni_cls_listener)
+    {
+        LOGE("could not get jni_cls_listener");
+        goto exit_error;
+    }
+
+    jmethodID jni_mid_listener = (*env)->GetMethodID(env, jni_cls_listener,
+                                                     "onAdapterStateChanged",
+                                                     "(Lorg/iotivity/base/OcConnectivityType;Z)V");
+    if (!jni_mid_listener)
+    {
+        LOGE("could not get Method ID");
+        goto exit_error;
+    }
+
+    jclass jni_cls_enum = (*env)->FindClass(env, "org/iotivity/base/OcConnectivityType");
+    if (!jni_cls_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, jni_cls_enum,
+                                                             jni_mid_enum, adapter);
+
+    (*env)->CallVoidMethod(env, g_listenerObject, jni_mid_listener,
+                           jni_adaptertype, (jboolean)enabled);
+
+exit_error:
+    if (isAttached)
+    {
+        (*g_jvm)->DetachCurrentThread(g_jvm);
+    }
+    LOGI("OUT -  CAManagerAdapterStateChangedCB");
+}
+
+JNIEXPORT void JNICALL
+Java_org_iotivity_ca_CaInterface_caManagerInitialize(JNIEnv *env, jclass clazz,
+                                                     jobject context, jobject listener)
+{
+    LOGI("CaManagere_initialize");
+
+    g_listenerObject = (*env)->NewGlobalRef(env, listener);
+
+    CARegisterNetworkMonitorHandler(CAManagerAdapterStateChangedCB,
+                                    CAManagerConnectionStateChangedCB);
+}
+
+JNIEXPORT void JNICALL
+Java_org_iotivity_ca_CaInterface_caManagerTerminate(JNIEnv *env, jclass clazz)
+{
+    LOGI("CaManager_terminate");
+
+    CAUtilClientTerminate(env);
+
+    if (g_listenerObject)
+    {
+        (*env)->DeleteGlobalRef(env, g_listenerObject);
+    }
+}
+
+JNIEXPORT void JNICALL
+Java_org_iotivity_ca_CaInterface_caManagerSetAutoConnectionDeviceInfo(JNIEnv *env,
+                                                                      jclass clazz,
+                                                                      jstring jaddress)
+{
+    LOGI("CaManager_setAutoConnectionDeviceInfo");
+
+    const char* address = (*env)->GetStringUTFChars(env, jaddress, NULL);
+    if (!address)
+    {
+        LOGE("address is null");
+        return;
+    }
+
+    CASetAutoConnectionDeviceInfo(address);
+}
+
+JNIEXPORT void JNICALL
+Java_org_iotivity_ca_CaInterface_caManagerUnsetAutoConnectionDeviceInfo(JNIEnv *env,
+                                                                        jclass clazz,
+                                                                        jstring jaddress)
+{
+    LOGI("CaManager_unsetAutoConnectionDeviceInfo");
+
+    const char* address = (*env)->GetStringUTFChars(env, jaddress, NULL);
+    if (!address)
+    {
+        LOGE("address is null");
+        return;
+    }
+
+    CAUnsetAutoConnectionDeviceInfo(address);
+}
index afd5732..d8d36fd 100644 (file)
 #ifdef __cplusplus
 extern "C" {
 #endif
+
+    void CAManagerConnectionStateChangedCB(CATransportAdapter_t adapter,
+                                           const char *remote_address, bool connected);
+
+    void CAManagerAdapterStateChangedCB(CATransportAdapter_t adapter, bool enabled);
+
+    /*
+     * Class:     Java_org_iotivity_ca_CaInterface_caManagerInitialize
+     * Method:    caManagerInitialize
+     * Signature: (Landroid/content/Context;)V
+     */
+    JNIEXPORT void JNICALL
+    Java_org_iotivity_ca_CaInterface_caManagerInitialize(JNIEnv *env, jclass clazz,
+                                                         jobject context, jobject listener);
+
+    /*
+     * Class:     Java_org_iotivity_ca_CaInterface_caManagerTerminate
+     * Method:    caManagerTerminate
+     * Signature: ()V
+     */
+    JNIEXPORT void JNICALL
+    Java_org_iotivity_ca_CaInterface_caManagerTerminate(JNIEnv *env, jclass clazz);
+
+    /*
+     * Class:     Java_org_iotivity_ca_CaInterface_caManagerSetAutoConnectionDeviceInfo
+     * Method:    caManagerSetAutoConnectionDeviceInfo
+     * Signature: (Ljava/lang/String;)V
+     */
+    JNIEXPORT void JNICALL
+    Java_org_iotivity_ca_CaInterface_caManagerSetAutoConnectionDeviceInfo(JNIEnv *env,
+                                                                          jclass clazz,
+                                                                          jstring jaddress);
+
+    /*
+     * Class:     Java_org_iotivity_ca_CaInterface_caManagerUnsetAutoConnectionDeviceInfo
+     * Method:    caManagerUnsetAutoConnectionDeviceInfo
+     * Signature: (Ljava/lang/String;)V
+     */
+    JNIEXPORT void JNICALL
+    Java_org_iotivity_ca_CaInterface_caManagerUnsetAutoConnectionDeviceInfo(JNIEnv *env,
+                                                                            jclass clazz,
+                                                                            jstring jaddress);
+
     /*
      * Class:     org_iotivity_ca_CaInterface_Initialize
      * Method:    Initialize
@@ -41,4 +84,4 @@ extern "C" {
 #ifdef __cplusplus
 }
 #endif
-#endif
\ No newline at end of file
+#endif
index 991b111..2d42a3e 100644 (file)
@@ -114,4 +114,21 @@ public enum OcConnectivityType {
 
         return typeSet;
     }
-}
+
+    public static OcConnectivityType getInstance(int caTransportAdapter) {
+        switch (caTransportAdapter) {
+            case (1 << 0):
+                return CT_ADAPTER_IP;
+            case (1 << 1):
+                return CT_ADAPTER_GATT_BTLE;
+            case (1 << 2):
+                return CT_ADAPTER_RFCOMM_BTEDR;
+            case (1 << 3):
+                return CT_ADAPTER_REMOTE_ACCESS;
+            case (1 << 4):
+                return CT_ADAPTER_TCP;
+            default:
+                return CT_DEFAULT;
+        }
+    }
+}
\ No newline at end of file
index bcae277..82f1041 100644 (file)
@@ -24,12 +24,85 @@ package org.iotivity.ca;
 
 import android.content.Context;
 import android.app.Activity;
+import org.iotivity.base.OcException;
+import org.iotivity.base.OcConnectivityType;
 
 public class CaInterface {
     static {
         System.loadLibrary("connectivity_abstraction");
         System.loadLibrary("ca-interface");
     }
+    private static volatile boolean isConnectionManagerInitialized = false;
 
     public static native void initialize(Activity activity, Context context);
+
+    /**
+     *  Method start connection manager service.
+     *  this method has to be called before other API call.
+     *  @param context                                application context
+     *  @param onConnectionManagerStateListener       connection state callback listener
+     */
+    public synchronized static void startManagerService(Context context,
+            OnConnectionManagerStateListener onConnectionManagerStateListener) {
+        if (!isConnectionManagerInitialized) {
+            CaInterface.caManagerInitialize(context, onConnectionManagerStateListener);
+            isConnectionManagerInitialized = true;
+        }
+    }
+
+    /**
+     *  Method stop connection manager service.
+     *  this method must be called, when Application is destroied.
+     */
+    public synchronized static void stopManagerService() {
+        if (isConnectionManagerInitialized) {
+            CaInterface.caManagerTerminate();
+            isConnectionManagerInitialized = false;
+        }
+    }
+
+    /**
+     *  Method set device information for Auto-Connection.
+     *  this method has to be called before FindResource is called.
+     *  @param address                      LE address of scanned bluetooth device.
+     */
+    public synchronized static void setAutoConnectionDevice(String address)
+            throws OcException {
+        CaInterface.initCheckForConnectionManager();
+        CaInterface.caManagerSetAutoConnectionDeviceInfo(address);
+    }
+
+    /**
+     *  Method unset device information for Auto-Connection.
+     *  @param address                      LE address of scanned bluetooth device.
+     */
+    public synchronized static void unsetAutoConnectionDevice(String address)
+            throws OcException {
+        CaInterface.initCheckForConnectionManager();
+        CaInterface.caManagerUnsetAutoConnectionDeviceInfo(address);
+    }
+
+    /**
+     *  Interface for connection manager state listener.
+     *  Event listeners are notified asynchronously.
+     */
+    public interface OnConnectionManagerStateListener {
+        public void onAdapterStateChanged(OcConnectivityType type, boolean enabled);
+        public void onConnectionStateChanged(OcConnectivityType type, String address,
+                boolean connected);
+    }
+
+    private static void initCheckForConnectionManager() {
+        if (!isConnectionManagerInitialized) {
+            throw new IllegalStateException("ConnectionManager must be started by making "
+                    + "a call to CaInterface.startManagerService before any other API "
+                    + "calls are permitted");
+        }
+    }
+
+    private static native void caManagerInitialize(Context context,
+            OnConnectionManagerStateListener onConnectionManagerStateListener);
+    private static native void caManagerTerminate();
+    private static native void caManagerSetAutoConnectionDeviceInfo(String address);
+    private static native void caManagerUnsetAutoConnectionDeviceInfo(String address);
 }
\ No newline at end of file
index fb8c801..7e31d3b 100644 (file)
@@ -22,7 +22,9 @@
 #define CA_UTILS_INTERFACE_H_
 
 #include "cacommon.h"
-
+#ifdef __ANDROID__
+#include "jni.h"
+#endif
 #ifdef __cplusplus
 extern "C"
 {
@@ -56,6 +58,26 @@ CAResult_t CASetAutoConnectionDeviceInfo(const char* address);
 
 CAResult_t CAUnsetAutoConnectionDeviceInfo(const char* address);
 
+#ifdef __ANDROID__
+/**
+ * initialize util client for android
+ * @param[in]   env                   JNI interface pointer.
+ * @param[in]   jvm                   invocation inferface for JAVA virtual machine.
+ * @param[in]   context               application context.
+ *
+ * @return  ::CA_STATUS_OK or ::CA_STATUS_FAILED or ::CA_MEMORY_ALLOC_FAILED
+ */
+CAResult_t CAUtilClientInitialize(JNIEnv *env, JavaVM *jvm, jobject context);
+
+/**
+ * terminate util client for android
+ * @param[in]   env                   JNI interface pointer.
+ *
+ * @return  ::CA_STATUS_OK or ::CA_STATUS_FAILED or ::CA_MEMORY_ALLOC_FAILED
+ */
+CAResult_t CAUtilClientTerminate(JNIEnv *env);
+#endif
+
 #ifdef __cplusplus
 } /* extern "C" */
 #endif
index c9e1257..9a175bf 100644 (file)
@@ -58,6 +58,28 @@ void CAStartServerLEAdvertising();
  */
 void CAStopServerLEAdvertising();
 
+#ifdef __ANDROID__
+#ifdef LE_ADAPTER
+/**
+ * initialize client connection manager
+ * @param[in]   env                   JNI interface pointer.
+ * @param[in]   jvm                   invocation inferface for JAVA virtual machine.
+ * @param[in]   context               application context.
+ *
+ * @return  ::CA_STATUS_OK or ::CA_STATUS_FAILED or ::CA_MEMORY_ALLOC_FAILED
+ */
+CAResult_t CAManagerLEClientInitialize(JNIEnv *env, JavaVM *jvm, jobject context);
+
+/**
+ * terminate client connection manager
+ * @param[in]   env                   JNI interface pointer.
+ *
+ * @return  ::CA_STATUS_OK or ::CA_STATUS_FAILED or ::CA_MEMORY_ALLOC_FAILED
+ */
+CAResult_t CAManagerLEClientTerminate(JNIEnv *env);
+#endif
+#endif
+
 #ifdef __cplusplus
 } /* extern "C" */
 #endif
index 97da4f9..99a873a 100644 (file)
@@ -61,3 +61,41 @@ CAResult_t CAUnsetAutoConnectionDeviceInfo(const char *address)
     return CA_NOT_SUPPORTED;
 #endif
 }
+
+#ifdef __ANDROID__
+/**
+ * initialize client connection manager
+ * @param[in]   env                   JNI interface pointer.
+ * @param[in]   jvm                   invocation inferface for JAVA virtual machine.
+ * @param[in]   context               application context.
+ */
+CAResult_t CAUtilClientInitialize(JNIEnv *env, JavaVM *jvm, jobject context)
+{
+    OIC_LOG(DEBUG, TAG, "CAUtilClientInitialize");
+#ifdef LE_ADAPTER
+
+#else
+    OIC_LOG(DEBUG, TAG, "it is not supported");
+    return CA_NOT_SUPPORTED;
+#endif
+
+    return CA_STATUS_OK;
+}
+
+/**
+ * terminate client connection manager
+ * @param[in]   env                   JNI interface pointer.
+ */
+CAResult_t CAUtilClientTerminate(JNIEnv *env)
+{
+    OIC_LOG(DEBUG, TAG, "CAUtilClientTerminate");
+#ifdef LE_ADAPTER
+
+#else
+    OIC_LOG(DEBUG, TAG, "it is not supported");
+    return CA_NOT_SUPPORTED;
+#endif
+
+    return CA_STATUS_OK;
+}
+#endif