Update function name & data struct name in ESRichCommon.h and implement JNI logic...
authorHeewon Park <h_w.park@samsung.com>
Wed, 29 Jun 2016 05:19:47 +0000 (14:19 +0900)
committerMadan Lanka <lanka.madan@samsung.com>
Thu, 30 Jun 2016 14:03:19 +0000 (14:03 +0000)
- JNI Logic implement(initRemoteEnrollee, RequestPropertyData, DataProvisioning, SecurityProvisioning)

Change-Id: Ic38924573b4c733bfa257b4ddb763f49e8cca00c
Signed-off-by: Heewon Park <h_w.park@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/9015
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Madan Lanka <lanka.madan@samsung.com>
20 files changed:
service/easy-setup/mediator/richsdk/android/jni/JniCloudProvisioningStatusListener.cpp
service/easy-setup/mediator/richsdk/android/jni/JniDataProvisioningStatusListener.cpp [new file with mode: 0644]
service/easy-setup/mediator/richsdk/android/jni/JniDataProvisioningStatusListener.h [moved from service/easy-setup/mediator/richsdk/android/jni/JniProvisioningStatusListener.h with 64% similarity, mode: 0644]
service/easy-setup/mediator/richsdk/android/jni/JniEsUtils.cpp
service/easy-setup/mediator/richsdk/android/jni/JniEsUtils.h
service/easy-setup/mediator/richsdk/android/jni/JniJvm.cpp
service/easy-setup/mediator/richsdk/android/jni/JniJvm.h
service/easy-setup/mediator/richsdk/android/jni/JniRemoteEnrollee.cpp
service/easy-setup/mediator/richsdk/android/jni/JniRemoteEnrollee.h
service/easy-setup/mediator/richsdk/android/jni/JniRequestPropertyDataStatusListener.cpp [new file with mode: 0644]
service/easy-setup/mediator/richsdk/android/jni/JniRequestPropertyDataStatusListener.h [new file with mode: 0644]
service/easy-setup/mediator/richsdk/android/jni/JniSecurityStatusListener.cpp [moved from service/easy-setup/mediator/richsdk/android/jni/JniProvisioningStatusLisener.cpp with 57% similarity, mode: 0644]
service/easy-setup/mediator/richsdk/android/jni/JniSecurityStatusListener.h [new file with mode: 0644]
service/easy-setup/mediator/richsdk/inc/ESRichCommon.h
service/easy-setup/mediator/richsdk/inc/EnrolleeSecurity.h
service/easy-setup/mediator/richsdk/inc/RemoteEnrollee.h
service/easy-setup/mediator/richsdk/src/EnrolleeResource.cpp
service/easy-setup/mediator/richsdk/src/EnrolleeSecurity.cpp
service/easy-setup/mediator/richsdk/src/RemoteEnrollee.cpp
service/easy-setup/sampleapp/mediator/linux/richsdk_sample/mediator_cpp.cpp

index 22343b2..3162b55 100755 (executable)
@@ -123,11 +123,11 @@ void JniCloudProvisioningStatusListener::checkExAndRemoveListener(JNIEnv *env)
     {
         jthrowable ex = env->ExceptionOccurred();
         env->ExceptionClear();
-        m_ownerResource->removeCloudProvisioningStatusListener(env, m_jwListener);
+        m_ownerResource->removeStatusListener<JniCloudProvisioningStatusListener>(env, m_jwListener);
         env->Throw((jthrowable)ex);
     }
     else
     {
-        m_ownerResource->removeCloudProvisioningStatusListener(env, m_jwListener);
+        m_ownerResource->removeStatusListener<JniCloudProvisioningStatusListener>(env, m_jwListener);
     }
 }
diff --git a/service/easy-setup/mediator/richsdk/android/jni/JniDataProvisioningStatusListener.cpp b/service/easy-setup/mediator/richsdk/android/jni/JniDataProvisioningStatusListener.cpp
new file mode 100644 (file)
index 0000000..300a841
--- /dev/null
@@ -0,0 +1,125 @@
+/******************************************************************
+ *
+ * Copyright 2016 Samsung Electronics All Rights Reserved.
+ *
+ *
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************/
+
+#include "JniDataProvisioningStatusListener.h"
+#include "JniRemoteEnrollee.h"
+
+using namespace OIC::Service;
+
+JniDataProvisioningStatusListener::JniDataProvisioningStatusListener(JNIEnv *env, jobject jListener,
+        JniRemoteEnrollee *owner)
+    : m_ownerResource(owner)
+{
+    m_jwListener = env->NewWeakGlobalRef(jListener);
+}
+
+JniDataProvisioningStatusListener::~JniDataProvisioningStatusListener()
+{
+    LOGI("~JniDataProvisioningStatusListener()");
+    if (m_jwListener)
+    {
+        jint ret;
+        JNIEnv *env = GetESJNIEnv(ret);
+        if (NULL == env) return;
+        env->DeleteWeakGlobalRef(m_jwListener);
+        if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
+    }
+}
+
+void JniDataProvisioningStatusListener::dataProvisionStatusCallback (std::shared_ptr<DataProvisioningStatus>
+        dataProvStatusCb)
+{
+
+    LOGI("JniDataProvisioningStatusListener::provisioiningStatusCallback enter");
+
+    jint ret;
+    JNIEnv *env = GetESJNIEnv(ret);
+    if (NULL == env) return;
+    jobject jListener = env->NewLocalRef(m_jwListener);
+    if (!jListener)
+    {
+        checkExAndRemoveListener(env);
+        if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
+        return;
+    }
+
+    jclass clsL = env->GetObjectClass(jListener);
+    if (!clsL)
+    {
+        checkExAndRemoveListener(env);
+        if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
+        return;
+    }
+    //TODO:
+    jmethodID midL = env->GetMethodID(clsL, "onProgress",
+                                      "(Lorg/iotivity/service/easysetup/mediator/"
+                                      "DataProvisioningCallback;"
+                                      ")V");
+
+    if (!midL)
+    {
+        checkExAndRemoveListener(env);
+        if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
+        return;
+    }
+
+    int nativeESResult = convertNativeDataProvResultToInt(dataProvStatusCb->getESResult());
+    int nativeESDataProvState = convertNativeDataProvStateToInt(dataProvStatusCb->getESDataProvState());
+
+    jobject jDataProvisioningStatus = NULL;
+    jDataProvisioningStatus = env->NewObject(g_cls_DataProvisioningStatus,
+                                                g_mid_DataProvisioningStatus_ctor,
+                                                (jint)nativeESResult,
+                                                (jint)nativeESDataProvState);
+
+    LOGI("JniDataProvisioningStatus::onDataProvisioningStatus - %d, %d", nativeESResult, nativeESDataProvState);
+    if (!jDataProvisioningStatus)
+    {
+        LOGE("JniDataProvisioningStatus::onDataProvisioningStatus Unable to create the java object");
+        return ;
+    }
+
+    env->CallVoidMethod(jListener, midL, jDataProvisioningStatus);
+
+    if (env->ExceptionCheck())
+    {
+        LOGE("Java exception is thrown");
+        checkExAndRemoveListener(env);
+        if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
+        return;
+    }
+
+    if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
+}
+
+void JniDataProvisioningStatusListener::checkExAndRemoveListener(JNIEnv *env)
+{
+    if (env->ExceptionCheck())
+    {
+        jthrowable ex = env->ExceptionOccurred();
+        env->ExceptionClear();
+        m_ownerResource->removeStatusListener<JniDataProvisioningStatusListener>(env, m_jwListener);
+        env->Throw((jthrowable)ex);
+    }
+    else
+    {
+        m_ownerResource->removeStatusListener<JniDataProvisioningStatusListener>(env, m_jwListener);
+    }
+}
  * limitations under the License.
  *
  ******************************************************************/
-/** @file   JniProvisioningStatusListener.h
- *
- *   @brief  This file contains JNI Provisioing status Listener class
- */
 
-#ifndef __JNI_ES_PROVISIONING_STATUS_LISTENER_H_
-#define __JNI_ES_PROVISIONING_STATUS_LISTENER_H_
+#ifndef __JNI_ES_DATA_PROVISIONING_STATUS_LISTENER_H_
+#define __JNI_ES_DATA_PROVISIONING_STATUS_LISTENER_H_
 
 #include <jni.h>
 
@@ -36,28 +32,23 @@ class JniRemoteEnrollee;
 
 using namespace OIC::Service;
 
-/**
- * @class   JniProvisioningStatusListener
- * @brief   This class provides functions for handling the provisioning status callback between the Java and native layer
- *
- */
-class JniProvisioningStatusListener
+class JniDataProvisioningStatusListener
 {
     public:
         /**
          * @brief constructor
          */
-        JniProvisioningStatusListener(JNIEnv *env, jobject jListener, JniRemoteEnrollee *resource);
+        JniDataProvisioningStatusListener(JNIEnv *env, jobject jListener, JniRemoteEnrollee *resource);
 
         /**
          * @brief destructor
         */
-        ~JniProvisioningStatusListener();
+        ~JniDataProvisioningStatusListener();
 
         /**
          * @brief callback function that will be passed to Native layer
         */
-        //void provisionStatusCallback (std::shared_ptr<EasySetupStatus> easySetupStatus);
+        void dataProvisionStatusCallback (std::shared_ptr<DataProvisioningStatus> dataProvisioningStatus);
 
     private:
         jweak m_jwListener;
@@ -65,4 +56,4 @@ class JniProvisioningStatusListener
         void checkExAndRemoveListener(JNIEnv *env);
 };
 
-#endif //__JNI_ES_PROVISIONING_STATUS_LISTENER_H_
+#endif //__JNI_ES_DATA_PROVISIONING_STATUS_LISTENER_H_
index 71e4341..852314f 100755 (executable)
@@ -44,3 +44,113 @@ OCConnectivityType  getOCConnectivityTypeFromInt(int connectivityType)
     }
     return CT_DEFAULT;
 }
+
+WIFI_AUTHTYPE getWifiAuthTypeFromInt(int authType)
+{
+    switch (authType)
+    {
+        case 0:
+            return WIFI_AUTHTYPE::NONE_AUTH;
+        case 1:
+            return WIFI_AUTHTYPE::WEP;
+        case 2:
+            return WIFI_AUTHTYPE::WPA_PSK;
+        case 3:
+            return WIFI_AUTHTYPE::WPA2_PSK;
+    }
+    return NONE_AUTH;
+}
+
+WIFI_ENCTYPE getWifiEncTypeFromInt(int encType)
+{
+    switch (encType)
+    {
+        case 0:
+            return WIFI_ENCTYPE::NONE_ENC;
+        case 1:
+            return WIFI_ENCTYPE::WEP_64;
+        case 2:
+            return WIFI_ENCTYPE::WEP_128;
+        case 3:
+            return WIFI_ENCTYPE::TKIP;
+        case 4:
+            return WIFI_ENCTYPE::AES;
+        case 5:
+            return WIFI_ENCTYPE::TKIP_AES;
+    }
+    return NONE_ENC;
+}
+
+int convertNativeWifiFreqToInt(WIFI_FREQ wifiFreq)
+{
+    switch (wifiFreq)
+    {
+        case WIFI_FREQ::WIFI_24G:
+            return 0;
+        case WIFI_FREQ::WIFI_5G:
+            return 1;
+        case WIFI_FREQ::WIFI_BOTH:
+            return 2;
+    }
+}
+
+int convertNativeWifiModeToInt(WIFI_MODE wifiMode)
+{
+    switch (wifiMode)
+    {
+        case WIFI_MODE::WIFI_11A:
+            return 0;
+        case WIFI_MODE::WIFI_11B:
+            return 1;
+        case WIFI_MODE::WIFI_11G:
+            return 2;
+        case WIFI_MODE::WIFI_11N:
+            return 3;
+        case WIFI_MODE::WIFI_11AC:
+            return 4;
+    }
+}
+
+int convertNativeDataProvStateToInt(ESDataProvState nativeState)
+{
+    switch (nativeState)
+    {
+        case ESDataProvState::ES_PROVISIONING_ERROR:
+            return -1;
+        case ESDataProvState::ES_NEED_PROVISIONING:
+            return 0;
+        case ESDataProvState::ES_PROVISIONED_ALREADY:
+            return 1;
+        case ESDataProvState::ES_PROVISIONING_SUCCESS:
+            return 2;
+    }
+}
+
+int convertNativeDataProvResultToInt(ESResult nativeResult)
+{
+    switch (nativeResult)
+    {
+        case ESResult::ES_ERROR:
+            return -1;
+        case ESResult::ES_OK:
+            return 0;
+        case ESResult::ES_NETWORKFOUND:
+            return 1;
+        case ESResult::ES_NETWORKCONNECTED:
+            return 2;
+        case ESResult::ES_NETWORKNOTCONNECTED:
+            return 3;
+        case ESResult::ES_RESOURCECREATED:
+            return 11;
+        case ESResult::ES_RECVREQOFPROVRES:
+            return 21;
+        case ESResult::ES_RECVREQOFNETRES:
+            return 22;
+        case ESResult::ES_RECVUPDATEOFPROVRES:
+            return 23;
+        case ESResult::ES_RECVTRIGGEROFPROVRES:
+            return 24;
+        case ESResult::ES_UNAUTHORIZED:
+            return 31;
+    }
+}
\ No newline at end of file
index 7ae6390..526b04e 100755 (executable)
@@ -47,4 +47,10 @@ void throwESException(JNIEnv *env, std::string reason);
 */
 OCConnectivityType  getOCConnectivityTypeFromInt(int connectivityType);
 
+WIFI_AUTHTYPE getWifiAuthTypeFromInt(int authType);
+WIFI_ENCTYPE getWifiEncTypeFromInt(int encType);
+int convertNativeWifiFreqToInt(WIFI_FREQ wifiFreq);
+int convertNativeWifiModeToInt(WIFI_MODE wifiMode);
+int convertNativeDataProvStateToInt(ESDataProvState nativeState);
+int convertNativeDataProvResultToInt(ESResult nativeResult);
 #endif //__JNI_ES_UTILS_H_
index 9c7fb12..bf43627 100755 (executable)
 JavaVM *g_jvm = NULL;
 
 jclass g_cls_RemoteEnrollee = NULL;
+jclass g_cls_PropertyData = NULL;
+jclass g_cls_DeviceConfig = NULL;
+jclass g_cls_NetworkInfo = NULL;
+jclass g_cls_RequestPropertyDataStatus = NULL;
+jclass g_cls_SecurityProvisioningStatus = NULL;
+jclass g_cls_DataProvisioningStatus = NULL;
 jclass g_cls_ESException = NULL;
 jclass g_cls_CloudProvisioningStatus = NULL;
 
 jmethodID g_mid_RemoteEnrollee_ctor = NULL;
 jmethodID g_mid_ESException_ctor = NULL;
+jmethodID g_mid_PropertyData_ctor = NULL;
+jmethodID g_mid_DeviceConfig_ctor = NULL;
+jmethodID g_mid_NetworkInfo_ctor = NULL;
+jmethodID g_mid_RequestPropertyDataStatus_ctor = NULL;
+jmethodID g_mid_SecurityProvisioningStatus_ctor = NULL;
+jmethodID g_mid_DataProvisioningStatus_ctor = NULL;
 jmethodID g_mid_CloudProvisioningStatus_ctor = NULL;
 
 // JNI OnLoad
@@ -63,6 +75,73 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
     g_mid_ESException_ctor = env->GetMethodID(g_cls_ESException, "<init>", "(Ljava/lang/String;)V");
     if (!g_mid_ESException_ctor) return JNI_ERR;
 
+   // DeviceConfig
+    clazz = env->FindClass("org/iotivity/service/easysetup/mediator/DeviceConfig");
+    if (!clazz) return JNI_ERR;
+
+    g_cls_DeviceConfig = (jclass)env->NewGlobalRef(clazz);
+    env->DeleteLocalRef(clazz);
+
+    g_mid_DeviceConfig_ctor = env->GetMethodID(g_cls_DeviceConfig, "<init>",
+                                "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
+    if (!g_mid_DeviceConfig_ctor) return JNI_ERR;
+
+    // NetworkInfo
+    clazz = env->FindClass("org/iotivity/service/easysetup/mediator/NetworkInfo");
+    if (!clazz) return JNI_ERR;
+
+    g_cls_NetworkInfo = (jclass)env->NewGlobalRef(clazz);
+    env->DeleteLocalRef(clazz);
+
+    g_mid_NetworkInfo_ctor = env->GetMethodID(g_cls_NetworkInfo, "<init>",
+                                "(Ljava.util.ArrayList;I)V");
+    if (!g_mid_NetworkInfo_ctor) return JNI_ERR;
+
+    // PropertyData
+    clazz = env->FindClass("org/iotivity/service/easysetup/mediator/PropertyData");
+    if (!clazz) return JNI_ERR;
+
+    g_cls_PropertyData = (jclass)env->NewGlobalRef(clazz);
+    env->DeleteLocalRef(clazz);
+
+    g_mid_PropertyData_ctor = env->GetMethodID(g_cls_PropertyData, "<init>",
+                                "(LDeviceConfig;LNetworkInfo;Z)V");
+    if (!g_mid_PropertyData_ctor) return JNI_ERR;
+
+    // RequestPropertyDataStatus
+
+    clazz = env->FindClass("org/iotivity/service/easysetup/mediator/RequestPropertyDataStatus");
+    if (!clazz) return JNI_ERR;
+
+    g_cls_RequestPropertyDataStatus = (jclass)env->NewGlobalRef(clazz);
+    env->DeleteLocalRef(clazz);
+
+    g_mid_RequestPropertyDataStatus_ctor = env->GetMethodID(g_cls_RequestPropertyDataStatus, "<init>",
+                                "(ILPropertyData;)V");
+    if (!g_mid_RequestPropertyDataStatus_ctor) return JNI_ERR;
+
+    // SecurityProvisioningStatus
+    clazz = env->FindClass("org/iotivity/service/easysetup/mediator/SecurityProvisioningStatus");
+    if (!clazz) return JNI_ERR;
+
+    g_cls_SecurityProvisioningStatus = (jclass)env->NewGlobalRef(clazz);
+    env->DeleteLocalRef(clazz);
+
+    g_mid_SecurityProvisioningStatus_ctor = env->GetMethodID(g_cls_SecurityProvisioningStatus, "<init>",
+                                "(ILjava/lang/String;)V");
+    if (!g_mid_SecurityProvisioningStatus_ctor) return JNI_ERR;
+
+    // DataProvisioningStatus
+    clazz = env->FindClass("org/iotivity/service/easysetup/mediator/DataProvisioningStatus");
+    if (!clazz) return JNI_ERR;
+
+    g_cls_DataProvisioningStatus = (jclass)env->NewGlobalRef(clazz);
+    env->DeleteLocalRef(clazz);
+
+    g_mid_DataProvisioningStatus_ctor = env->GetMethodID(g_cls_DataProvisioningStatus, "<init>",
+                                "(II)V");
+    if (!g_mid_DataProvisioningStatus_ctor) return JNI_ERR;
+
     // CloudProvisioningStatus
     clazz = env->FindClass("org/iotivity/service/easysetup/mediator/CloudProvisioningStatus");
     if (!clazz) return JNI_ERR;
index 11e6447..7b3726d 100755 (executable)
@@ -43,10 +43,22 @@ extern JavaVM *g_jvm;
 
 extern jclass g_cls_RemoteEnrollee;
 extern jclass g_cls_ESException;
+extern jclass g_cls_PropertyData;
+extern jclass g_cls_DeviceConfig;
+extern jclass g_cls_NetworkInfo;
+extern jclass g_cls_RequestPropertyDataStatus;
+extern jclass g_cls_SecurityProvisioningStatus;
+extern jclass g_cls_DataProvisioningStatus;
 extern jclass g_cls_CloudProvisioningStatus;
 
 extern jmethodID g_mid_RemoteEnrollee_ctor;
 extern jmethodID g_mid_ESException_ctor;
+extern jmethodID g_mid_PropertyData_ctor;
+extern jmethodID g_mid_DeviceConfig_ctor;
+extern jmethodID g_mid_NetworkInfo_ctor;
+extern jmethodID g_mid_RequestPropertyDataStatus_ctor;
+extern jmethodID g_mid_SecurityProvisioningStatus_ctor;
+extern jmethodID g_mid_DataProvisioningStatus_ctor;
 extern jmethodID g_mid_CloudProvisioningStatus_ctor;
 
 typedef void(*RemoveListenerCallback)(JNIEnv *env, jobject jListener);
index 31de275..c84b68d 100755 (executable)
@@ -51,29 +51,102 @@ JniRemoteEnrollee *JniRemoteEnrollee::getJniRemoteEnrollee(JNIEnv *env, jobject
     return remoteEnrollee;
 }
 
-JNIEXPORT void JNICALL
-Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeSetCloudProvInfo
-(JNIEnv *env, jobject jClass, jstring jauthCode, jstring jauthProvider, jstring jciServer)
+void JniRemoteEnrollee::initRemoteEnrollee(JNIEnv *env)
 {
-    LOGD("nativeSetCloudProvInfo Enter");
+    try
+    {
+        m_sharedResource->initRemoteEnrollee();
+    }
+    catch (ESBadRequestException exception)
+    {
+        LOGE("JNI initRemoteEnrollee :: Exception occured");
+        //throw the exception to java
+        throwESException( env,  exception.what());
+    }
+}
 
-    // TODO
-    JniRemoteEnrollee *remoteEnrollee = JniRemoteEnrollee::getJniRemoteEnrollee(env, jClass);
-    remoteEnrollee->setCloudProvInfo(env, jauthCode, jauthProvider, jciServer);
+void JniRemoteEnrollee::requestPropertyData(JNIEnv *env, jobject jListener)
+{
+    JniRequestPropertyDataStatusListener *onRequestPropertyDataStatusReceived =
+                    addStatusListener<JniRequestPropertyDataStatusListener>(env, jListener);
 
-    LOGD("nativeSetCloudProvInfo Exit");
+    RequestPropertyDataStatusCb requestPropertyDataStatusCallback = [onRequestPropertyDataStatusReceived]
+            (std::shared_ptr<OIC::Service::RequestPropertyDataStatus > requestPropertyDataStatus)
+    {
+        onRequestPropertyDataStatusReceived->requestPropertyDataStatusCallback(requestPropertyDataStatus);
+    };
+
+    try
+    {
+        m_sharedResource->requestPropertyData(requestPropertyDataStatusCallback);
+    }
+    catch (ESBadRequestException exception)
+    {
+        LOGE("JNI requestPropertyData :: Exception occured");
+        //throw the exception to java
+        throwESException( env,  exception.what());
+    }
 }
 
-JNIEXPORT void JNICALL
-Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeStartCloudProvisioning
-(JNIEnv *env, jobject jClass, jobject jListener)
+void JniRemoteEnrollee::startSecurityProvisioning(JNIEnv *env, jobject jListener)
 {
-    LOGD("nativeStartCloudProvisioning Enter");
+    JniSecurityStatusListener *onSecurityProvStatusReceived =
+                    addStatusListener<JniSecurityStatusListener>(env, jListener);
 
-    JniRemoteEnrollee *remoteEnrollee = JniRemoteEnrollee::getJniRemoteEnrollee(env, jClass);
-    remoteEnrollee->startCloudProvisioning(env, jListener);
+    SecurityProvStatusCb secProvStatusCallback = [onSecurityProvStatusReceived]
+            (std::shared_ptr<OIC::Service::SecProvisioningStatus > SecProvisioningStatus)
+    {
+        onSecurityProvStatusReceived->secProvisionStatusCallback(SecProvisioningStatus);
+    };
 
-    LOGD("nativeStartCloudProvisioning Exit");
+    try
+    {
+        m_sharedResource->startSecurityProvisioning(secProvStatusCallback);
+    }
+    catch (ESBadRequestException exception)
+    {
+        LOGE("JNI startSecurityProvisioning :: Exception occured");
+        //throw the exception to java
+        throwESException( env,  exception.what());
+    }
+}
+
+void JniRemoteEnrollee::startDataProvisioning(JNIEnv *env, jobject jListener)
+{
+    JniDataProvisioningStatusListener *onDataProvStatusReceived =
+                    addStatusListener<JniDataProvisioningStatusListener>(env, jListener);
+
+    DataProvStatusCb dataProvStatusCallback = [onDataProvStatusReceived]
+            (std::shared_ptr<OIC::Service::DataProvisioningStatus > dataProvisioningStatus)
+    {
+        onDataProvStatusReceived->dataProvisionStatusCallback(dataProvisioningStatus);
+    };
+
+    try
+    {
+        m_sharedResource->startDataProvisioning(dataProvStatusCallback);
+    }
+    catch (ESBadRequestException exception)
+    {
+        LOGE("JNI startDataProvisioning :: Exception occured");
+        //throw the exception to java
+        throwESException( env,  exception.what());
+    }
+}
+
+void JniRemoteEnrollee::setDataProvInfo(JNIEnv *env, jstring jssid, jstring jpwd, jint jauthType,
+    jint jencType, jstring jlanguage, jstring jcountry)
+{
+    DataProvInfo info;
+
+    info.WIFI.ssid = env->GetStringUTFChars(jssid, NULL);
+    info.WIFI.pwd = env->GetStringUTFChars(jpwd, NULL);
+    info.WIFI.authtype = getWifiAuthTypeFromInt(jauthType);
+    info.WIFI.enctype = getWifiEncTypeFromInt(jencType);
+    info.Device.language = env->GetStringUTFChars(jlanguage, NULL);
+    info.Device.country = env->GetStringUTFChars(jcountry, NULL);
+
+    m_sharedResource->setDataProvInfo(info);
 }
 
 void JniRemoteEnrollee::setCloudProvInfo(JNIEnv *env, jstring jauthCode, jstring jauthProvider, jstring jciServer)
@@ -88,8 +161,8 @@ void JniRemoteEnrollee::setCloudProvInfo(JNIEnv *env, jstring jauthCode, jstring
 
 void JniRemoteEnrollee::startCloudProvisioning(JNIEnv *env, jobject jListener)
 {
-    JniCloudProvisioningStatusListener *onCloudProvisioningStatusReceived = addCloudProvisioningStatusListener(env,
-            jListener);
+    JniCloudProvisioningStatusListener *onCloudProvisioningStatusReceived =
+                    addStatusListener<JniCloudProvisioningStatusListener>(env, jListener);
 
     CloudProvStatusCb provisionStatusCallback = [onCloudProvisioningStatusReceived]
             (std::shared_ptr< OIC::Service::CloudProvisioningStatus > cloudProvisioningStatus)
@@ -110,14 +183,89 @@ void JniRemoteEnrollee::startCloudProvisioning(JNIEnv *env, jobject jListener)
     }
 }
 
-JniCloudProvisioningStatusListener *JniRemoteEnrollee::addCloudProvisioningStatusListener(JNIEnv *env,
-        jobject jListener)
+//JNI
+JNIEXPORT void JNICALL
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeInitRemoteEnrollee
+(JNIEnv *env, jobject jClass)
+{
+    LOGD("nativeInitRemoteEnrollee Enter");
+
+    JniRemoteEnrollee *remoteEnrollee = JniRemoteEnrollee::getJniRemoteEnrollee(env, jClass);
+    remoteEnrollee->initRemoteEnrollee(env);
+
+    LOGD("nativeInitRemoteEnrollee Exit");
+}
+
+JNIEXPORT void JNICALL
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeRequestPropertyData
+(JNIEnv *env, jobject jClass, jobject jListener)
+{
+    LOGD("nativeRequestPropertyData Enter");
+
+    JniRemoteEnrollee *remoteEnrollee = JniRemoteEnrollee::getJniRemoteEnrollee(env, jClass);
+    remoteEnrollee->requestPropertyData(env, jListener);
+
+    LOGD("nativeRequestPropertyData Exit");
+}
+
+JNIEXPORT void JNICALL
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeStartSecurityProvision
+(JNIEnv *env, jobject jClass, jobject jListener)
+{
+    LOGD("nativeStartSecurityProvision Enter");
+
+    JniRemoteEnrollee *remoteEnrollee = JniRemoteEnrollee::getJniRemoteEnrollee(env, jClass);
+    remoteEnrollee->startSecurityProvisioning(env, jListener);
+
+    LOGD("nativeStartSecurityProvision Exit");
+}
+
+JNIEXPORT void JNICALL
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeStartDataProvision
+(JNIEnv *env, jobject jClass, jobject jListener)
+{
+    LOGD("nativeStartDataProvision Enter");
+
+    JniRemoteEnrollee *remoteEnrollee = JniRemoteEnrollee::getJniRemoteEnrollee(env, jClass);
+    remoteEnrollee->startDataProvisioning(env, jListener);
+
+    LOGD("nativeStartDataProvision Exit");
+}
+
+JNIEXPORT void JNICALL
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeSetDataProvInfo
+(JNIEnv *env, jobject jClass, jstring jssid, jstring jpwd, jint jauthType, jint jencType,
+    jstring jlanguage, jstring jcountry)
 {
-    return this->m_cloudProvisioningStatus.addListener(env, jListener, this);
+    LOGD("nativeSetDataProvInfo Enter");
+
+    JniRemoteEnrollee *remoteEnrollee = JniRemoteEnrollee::getJniRemoteEnrollee(env, jClass);
+    remoteEnrollee->setDataProvInfo(env, jssid, jpwd, jauthType, jencType, jlanguage, jcountry);
+
+    LOGD("nativeSetDataProvInfo Exit");
 }
 
-void JniRemoteEnrollee::removeCloudProvisioningStatusListener(JNIEnv *env, jobject jListener)
+JNIEXPORT void JNICALL
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeSetCloudProvInfo
+(JNIEnv *env, jobject jClass, jstring jauthCode, jstring jauthProvider, jstring jciServer)
 {
-    this->m_cloudProvisioningStatus.removeListener(env, jListener);
+    LOGD("nativeSetCloudProvInfo Enter");
+
+    // TODO
+    JniRemoteEnrollee *remoteEnrollee = JniRemoteEnrollee::getJniRemoteEnrollee(env, jClass);
+    remoteEnrollee->setCloudProvInfo(env, jauthCode, jauthProvider, jciServer);
+
+    LOGD("nativeSetCloudProvInfo Exit");
 }
 
+JNIEXPORT void JNICALL
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeStartCloudProvisioning
+(JNIEnv *env, jobject jClass, jobject jListener)
+{
+    LOGD("nativeStartCloudProvisioning Enter");
+
+    JniRemoteEnrollee *remoteEnrollee = JniRemoteEnrollee::getJniRemoteEnrollee(env, jClass);
+    remoteEnrollee->startCloudProvisioning(env, jListener);
+
+    LOGD("nativeStartCloudProvisioning Exit");
+}
\ No newline at end of file
index 2d48eba..22a12ec 100755 (executable)
@@ -33,7 +33,9 @@
 
 #include "JniJvm.h"
 #include "JniEsUtils.h"
-#include "JniProvisioningStatusListener.h"
+#include "JniRequestPropertyDataStatusListener.h"
+#include "JniSecurityStatusListener.h"
+#include "JniDataProvisioningStatusListener.h"
 #include "JniCloudProvisioningStatusListener.h"
 #include "JniEsListenerManager.h"
 
@@ -60,19 +62,30 @@ class JniRemoteEnrollee
         ~JniRemoteEnrollee();
 
         // ***** JNI APIs internally call the APIs of this class ***** //
-
-        void setCloudProvInfo(JNIEnv *env, jstring authCode, jstring authProvider, jstring ciServer);
-
+        void initRemoteEnrollee(JNIEnv *env);
+        void requestPropertyData(JNIEnv *env, jobject jListener);
+        void startSecurityProvisioning(JNIEnv *env, jobject jListener);
+        void startDataProvisioning(JNIEnv *env, jobject jListener);
         void startCloudProvisioning(JNIEnv *env, jobject jListener);
+        void setDataProvInfo(JNIEnv *env, jstring jssid, jstring jpwd, jint jauthType,
+                                            jint jencType, jstring jlanguage, jstring jcountry);
+        void setCloudProvInfo(JNIEnv *env, jstring authCode, jstring authProvider, jstring ciServer);
 
         static JniRemoteEnrollee *getJniRemoteEnrollee(JNIEnv *env, jobject thiz);
 
-        JniCloudProvisioningStatusListener *addCloudProvisioningStatusListener(JNIEnv *env, jobject jListener);
-        void removeCloudProvisioningStatusListener(JNIEnv *env, jobject jListener);
+        template <class T>
+        T *addStatusListener(JNIEnv *env, jobject jListener)
+        {
+            return JniEsListenerManager<T>().addListener(env, jListener, this);
+        };
+
+        template <class T>
+        void removeStatusListener(JNIEnv *env, jobject jListener)
+        {
+            JniEsListenerManager<T>().removeListener(env, jListener);
+        };
 
     private:
-        void registerCloudProvisioningHandler(JNIEnv *env, jobject jListener);
-        JniEsListenerManager<JniCloudProvisioningStatusListener> m_cloudProvisioningStatus;
         std::shared_ptr<RemoteEnrollee> m_sharedResource;
 
 };
@@ -83,41 +96,54 @@ extern "C" {
 #endif
 
 /**
- * API for setting cloud provisioning information.
+ * API for starting the initRemoteEnrollee process.
  */
 JNIEXPORT void JNICALL
-Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeSetCloudProvInfo
-(JNIEnv *env, jobject jClass, jstring jauthCode, jstring jauthProvider, jstring jciServer);
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeInitRemoteEnrollee
+(JNIEnv *env, jobject jClass);
 
 /**
- * API for starting the cloud provisioning process.
+ * API for starting the Request PropertyData process.
  */
 JNIEXPORT void JNICALL
-Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeStartCloudProvisioning
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeRequestPropertyData
 (JNIEnv *env, jobject jClass, jobject jListener);
 
 /**
- * API for starting the provisioning process.
+ * API for starting the Sequrity provisioning process.
  */
-//JNIEXPORT void JNICALL
-//Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeStartProvision
-//(JNIEnv *env, jobject jClass);
+JNIEXPORT void JNICALL
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeStartSecurityProvision
+(JNIEnv *env, jobject jClass, jobject jListener);
 
 /**
- * API for stopping the provisioning process.
+ * API for starting the Data provisioning process.
  */
-//JNIEXPORT void JNICALL
-//Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeStopProvision
-//(JNIEnv *env, jobject jClass);
+JNIEXPORT void JNICALL
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeStartDataProvision
+(JNIEnv *env, jobject jClass);
 
 /**
- * API for setting the lisener for recieiving provisioning status.
- *
- * @param provisiongListener - Provisioning listener [callback from native layer will be passing to this listener]
+ * API for setting data provisioning information.
  */
-//JNIEXPORT void JNICALL
-//Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeRegisterProvisioningHandler
-//(JNIEnv *env, jobject jClass, jobject provisiongListener);
+JNIEXPORT void JNICALL
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeSetDataProvInfo
+(JNIEnv *env, jobject jClass, jstring jssid, jstring jpwd, jint jauthType, jint jencType,
+    jstring jlanguage, jstring jcountry);
+
+/**
+ * API for setting cloud provisioning information.
+ */
+JNIEXPORT void JNICALL
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeSetCloudProvInfo
+(JNIEnv *env, jobject jClass, jstring jauthCode, jstring jauthProvider, jstring jciServer);
+
+/**
+ * API for starting the cloud provisioning process.
+ */
+JNIEXPORT void JNICALL
+Java_org_iotivity_service_easysetup_mediator_RemoteEnrollee_nativeStartCloudProvisioning
+(JNIEnv *env, jobject jClass, jobject jListener);
 
 #ifdef __cplusplus
 }
diff --git a/service/easy-setup/mediator/richsdk/android/jni/JniRequestPropertyDataStatusListener.cpp b/service/easy-setup/mediator/richsdk/android/jni/JniRequestPropertyDataStatusListener.cpp
new file mode 100644 (file)
index 0000000..b70bdca
--- /dev/null
@@ -0,0 +1,155 @@
+/******************************************************************
+ *
+ * Copyright 2016 Samsung Electronics All Rights Reserved.
+ *
+ *
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************/
+
+#include "JniRequestPropertyDataStatusListener.h"
+#include "JniRemoteEnrollee.h"
+
+using namespace OIC::Service;
+
+JniRequestPropertyDataStatusListener::JniRequestPropertyDataStatusListener(JNIEnv *env, jobject jListener,
+        JniRemoteEnrollee *owner)
+    : m_ownerResource(owner)
+{
+    m_jwListener = env->NewWeakGlobalRef(jListener);
+}
+
+JniRequestPropertyDataStatusListener::~JniRequestPropertyDataStatusListener()
+{
+    LOGI("~JniRequestPropertyDataStatusListener()");
+    if (m_jwListener)
+    {
+        jint ret;
+        JNIEnv *env = GetESJNIEnv(ret);
+        if (NULL == env) return;
+        env->DeleteWeakGlobalRef(m_jwListener);
+        if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
+    }
+}
+
+void JniRequestPropertyDataStatusListener::requestPropertyDataStatusCallback (
+    std::shared_ptr<RequestPropertyDataStatus> requestPropertyDataStatusCb)
+{
+    LOGI("JniRequestPropertyDataStatusListener::provisioiningStatusCallback enter");
+
+    jint ret;
+    JNIEnv *env = GetESJNIEnv(ret);
+    if (NULL == env) return;
+    jobject jListener = env->NewLocalRef(m_jwListener);
+    if (!jListener)
+    {
+        checkExAndRemoveListener(env);
+        if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
+        return;
+    }
+
+    jclass clsL = env->GetObjectClass(jListener);
+    if (!clsL)
+    {
+        checkExAndRemoveListener(env);
+        if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
+        return;
+    }
+
+    jmethodID midL = env->GetMethodID(clsL, "onProgress",
+                                      "(Lorg/iotivity/service/easysetup/mediator/"
+                                      "RequestPropertyDataStatus;"
+                                      ")V");
+
+    if (!midL)
+    {
+        checkExAndRemoveListener(env);
+        if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
+        return;
+    }
+
+    const PropertyData propertyData = requestPropertyDataStatusCb->getPropertyData();
+    DeviceConfig devConf = propertyData.getDevConf();
+    NetworkInfo netInfo = propertyData.getNetInfo();
+
+    jobject jDevConf = NULL;
+    jDevConf = env->NewObject(g_cls_DeviceConfig,
+                                                g_mid_DeviceConfig_ctor,
+                                                (jstring)env->NewStringUTF(devConf.id.c_str()),
+                                                (jstring)env->NewStringUTF(devConf.name.c_str()),
+                                                (jstring)env->NewStringUTF(devConf.language.c_str()),
+                                                (jstring)env->NewStringUTF(devConf.country.c_str()));
+
+    jclass clazz = (*env).FindClass("java/util/ArrayList");
+    jobject wifiModeTypes = (*env).NewObject(clazz, (*env).GetMethodID(clazz, "<init>", "()V"));
+
+    for (int n=0; n<netInfo.types.size(); n++)
+    {
+       (*env).CallBooleanMethod(wifiModeTypes, (*env).GetMethodID(clazz, "add", "(java/lang/Object;)Z"),
+                                             convertNativeWifiModeToInt(static_cast<WIFI_MODE>(netInfo.types[n])));
+    }
+
+    jobject jNetInfo = NULL;
+    jNetInfo = env->NewObject(g_cls_NetworkInfo,
+                                                g_mid_NetworkInfo_ctor,
+                                                (jobject)wifiModeTypes,
+                                                (jint)convertNativeWifiFreqToInt(netInfo.freq));
+
+    jobject jPropertyData = NULL;
+    jPropertyData = env->NewObject(g_cls_PropertyData,
+                                                g_mid_PropertyData_ctor,
+                                                (jobject)jDevConf,
+                                                (jobject)jNetInfo,
+                                                (jboolean)propertyData.isCloudable());
+
+    jobject jRequestPropertyDataStatus = NULL;
+    jRequestPropertyDataStatus = env->NewObject(g_cls_RequestPropertyDataStatus,
+                                                g_mid_RequestPropertyDataStatus_ctor,
+                                                convertNativeDataProvResultToInt(requestPropertyDataStatusCb->getESResult()),
+                                                (jobject)jPropertyData);
+
+    if (!jRequestPropertyDataStatus)
+    {
+        LOGE("JniRequestPropertyDataStatusListener::requestPropertyDataStatusCallback Unable to create the java object");
+        return ;
+    }
+
+    env->CallVoidMethod(jListener, midL, jRequestPropertyDataStatus);
+
+    if (env->ExceptionCheck())
+    {
+        LOGE("Java exception is thrown");
+        checkExAndRemoveListener(env);
+        if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
+        return;
+    }
+
+    if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
+}
+
+void JniRequestPropertyDataStatusListener::checkExAndRemoveListener(JNIEnv *env)
+{
+    if (env->ExceptionCheck())
+    {
+        jthrowable ex = env->ExceptionOccurred();
+        env->ExceptionClear();
+        m_ownerResource->removeStatusListener<JniRequestPropertyDataStatusListener>(env, m_jwListener);
+
+        env->Throw((jthrowable)ex);
+    }
+    else
+    {
+        m_ownerResource->removeStatusListener<JniRequestPropertyDataStatusListener>(env, m_jwListener);
+    }
+}
diff --git a/service/easy-setup/mediator/richsdk/android/jni/JniRequestPropertyDataStatusListener.h b/service/easy-setup/mediator/richsdk/android/jni/JniRequestPropertyDataStatusListener.h
new file mode 100644 (file)
index 0000000..97acf72
--- /dev/null
@@ -0,0 +1,59 @@
+/******************************************************************
+ *
+ * Copyright 2016 Samsung Electronics All Rights Reserved.
+ *
+ *
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************/
+
+#ifndef __JNI_ES_REQUEST_PROPERTY_DATA_STATUS_LISTENER_H_
+#define __JNI_ES_REQUEST_PROPERTY_DATA_STATUS_LISTENER_H_
+
+#include <jni.h>
+
+#include "RemoteEnrollee.h"
+#include "ESRichCommon.h"
+
+#include "JniJvm.h"
+
+class JniRemoteEnrollee;
+
+using namespace OIC::Service;
+
+class JniRequestPropertyDataStatusListener
+{
+    public:
+        /**
+         * @brief constructor
+         */
+        JniRequestPropertyDataStatusListener(JNIEnv *env, jobject jListener, JniRemoteEnrollee *resource);
+
+        /**
+         * @brief destructor
+        */
+        ~JniRequestPropertyDataStatusListener();
+
+        /**
+         * @brief callback function that will be passed to Native layer
+        */
+        void requestPropertyDataStatusCallback (std::shared_ptr<RequestPropertyDataStatus> requestPropertyDataStatus);
+
+    private:
+        jweak m_jwListener;
+        JniRemoteEnrollee *m_ownerResource;
+        void checkExAndRemoveListener(JNIEnv *env);
+};
+
+#endif //__JNI_ES_REQUEST_PROPERTY_DATA_STATUS_LISTENER_H_
  *
  ******************************************************************/
 
-#include "JniProvisioningStatusListener.h"
+#include "JniSecurityStatusListener.h"
 #include "JniRemoteEnrollee.h"
 
 using namespace OIC::Service;
 
-JniProvisioningStatusListener::JniProvisioningStatusListener(JNIEnv *env, jobject jListener,
+JniSecurityStatusListener::JniSecurityStatusListener(JNIEnv *env, jobject jListener,
         JniRemoteEnrollee *owner)
     : m_ownerResource(owner)
 {
     m_jwListener = env->NewWeakGlobalRef(jListener);
 }
 
-JniProvisioningStatusListener::~JniProvisioningStatusListener()
+JniSecurityStatusListener::~JniSecurityStatusListener()
 {
-    LOGI("~JniProvisioningStatusListener()");
+    LOGI("~JniSecurityStatusListener()");
     if (m_jwListener)
     {
         jint ret;
@@ -42,12 +42,11 @@ JniProvisioningStatusListener::~JniProvisioningStatusListener()
         if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
     }
 }
-/*
-void JniProvisioningStatusListener::provisionStatusCallback (std::shared_ptr<EasySetupStatus>
-        easySetupStatus)
+void JniSecurityStatusListener::secProvisionStatusCallback(
+                std::shared_ptr<SecProvisioningStatus> secProvisioningStatus)
 {
 
-    LOGI("JniProvisioningStatusListener::provisioiningStatusCallback enter");
+    LOGI("JniSecurityStatusListener::secProvisionStatusCallback enter");
 
     jint ret;
     JNIEnv *env = GetESJNIEnv(ret);
@@ -68,8 +67,11 @@ void JniProvisioningStatusListener::provisionStatusCallback (std::shared_ptr<Eas
         return;
     }
 
-    jmethodID midL = env->GetMethodID(clsL, "onStatusRecieved",
-                                      "(I)V");
+    jmethodID midL = env->GetMethodID(clsL, "onProgress",
+                                      "(Lorg/iotivity/service/easysetup/mediator/"
+                                      "SecurityProvisioningStatus;"
+                                      ")V");
+
     if (!midL)
     {
         checkExAndRemoveListener(env);
@@ -77,9 +79,23 @@ void JniProvisioningStatusListener::provisionStatusCallback (std::shared_ptr<Eas
         return;
     }
 
-    EasySetupState nativeProvisioningState = easySetupStatus->getEasySetupState();
-    int provisionState = convertNativeProvisionStateToInt(nativeProvisioningState);
-    env->CallVoidMethod(jListener, midL, provisionState);
+    ESResult esResult = secProvisioningStatus->getESResult();
+
+    //create the java object
+    jobject jSecurityProvisioningStatus = NULL;
+    jSecurityProvisioningStatus = env->NewObject(g_cls_SecurityProvisioningStatus,
+                                                g_mid_SecurityProvisioningStatus_ctor,
+                                                (jint)esResult,
+                                                (jstring)env->NewStringUTF(secProvisioningStatus->getDeviceUUID().c_str()));
+
+    if (!jSecurityProvisioningStatus)
+    {
+        LOGE("JniSecurityStatusListener::onSecurityProvisioningStatus Unable to create the java object");
+        return ;
+    }
+
+    env->CallVoidMethod(jListener, midL, jSecurityProvisioningStatus);
+
     if (env->ExceptionCheck())
     {
         LOGE("Java exception is thrown");
@@ -91,18 +107,17 @@ void JniProvisioningStatusListener::provisionStatusCallback (std::shared_ptr<Eas
     if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread();
 }
 
-void JniProvisioningStatusListener::checkExAndRemoveListener(JNIEnv *env)
+void JniSecurityStatusListener::checkExAndRemoveListener(JNIEnv *env)
 {
     if (env->ExceptionCheck())
     {
         jthrowable ex = env->ExceptionOccurred();
         env->ExceptionClear();
-        m_ownerResource->removeProvisioningStatusListener(env, m_jwListener);
+        m_ownerResource->removeStatusListener<JniSecurityStatusListener>(env, m_jwListener);
         env->Throw((jthrowable)ex);
     }
     else
     {
-        m_ownerResource->removeProvisioningStatusListener(env, m_jwListener);
+        m_ownerResource->removeStatusListener<JniSecurityStatusListener>(env, m_jwListener);
     }
 }
-*/
diff --git a/service/easy-setup/mediator/richsdk/android/jni/JniSecurityStatusListener.h b/service/easy-setup/mediator/richsdk/android/jni/JniSecurityStatusListener.h
new file mode 100644 (file)
index 0000000..96cd896
--- /dev/null
@@ -0,0 +1,59 @@
+/******************************************************************
+ *
+ * Copyright 2016 Samsung Electronics All Rights Reserved.
+ *
+ *
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************/
+
+#ifndef __JNI_ES_SECURITY_PROVISIONING_STATUS_LISTENER_H_
+#define __JNI_ES_SECURITY_PROVISIONING_STATUS_LISTENER_H_
+
+#include <jni.h>
+
+#include "RemoteEnrollee.h"
+#include "ESRichCommon.h"
+
+#include "JniJvm.h"
+
+class JniRemoteEnrollee;
+
+using namespace OIC::Service;
+
+class JniSecurityStatusListener
+{
+    public:
+        /**
+         * @brief constructor
+         */
+        JniSecurityStatusListener(JNIEnv *env, jobject jListener, JniRemoteEnrollee *resource);
+
+        /**
+         * @brief destructor
+        */
+        ~JniSecurityStatusListener();
+
+        /**
+         * @brief callback function that will be passed to Native layer
+        */
+        void secProvisionStatusCallback (std::shared_ptr<SecProvisioningStatus> secProvisioningStatus);
+
+    private:
+        jweak m_jwListener;
+        JniRemoteEnrollee *m_ownerResource;
+        void checkExAndRemoveListener(JNIEnv *env);
+};
+
+#endif //__JNI_ES_SECURITY_PROVISIONING_STATUS_LISTENER_H_
index 2fed504..77e2110 100755 (executable)
@@ -129,11 +129,11 @@ namespace OIC
 
         typedef enum
         {
-            WiFi_11A = 0,
-            WiFi_11B,
-            WiFi_11G,
-            WiFi_11N,
-            WiFi_11AC
+            WIFI_11A = 0,
+            WIFI_11B,
+            WIFI_11G,
+            WIFI_11N,
+            WIFI_11AC
         } WIFI_MODE;
 
         typedef struct
@@ -180,7 +180,7 @@ namespace OIC
             ES_NEED_PROVISIONING,
             ES_PROVISIONED_ALREADY,
             ES_PROVISIONING_SUCCESS
-        } ESState;
+        } ESDataProvState;
 
         typedef enum
         {
@@ -214,7 +214,7 @@ namespace OIC
                 return m_devUUID;
             }
 
-            ESResult getResult()
+            ESResult getESResult()
             {
                 return m_result;
             }
@@ -235,17 +235,17 @@ namespace OIC
             {
             }
 
-            const DeviceConfig getDevInfo()
+            const DeviceConfig& getDevConf() const
             {
                 return m_devConfig;
             }
 
-            const NetworkInfo getNetInfo()
+            const NetworkInfo& getNetInfo() const
             {
                 return m_netInfo;
             }
 
-            bool isCloudable()
+            const bool isCloudable() const
             {
                 return m_cloudable;
             }
@@ -260,7 +260,7 @@ namespace OIC
         {
         public:
             RequestPropertyDataStatus(ESResult result, const PropertyData& data) :
-                    m_result(result), m_PropertyData(data)
+                    m_result(result), m_propertyData(data)
             {
             }
 
@@ -269,21 +269,21 @@ namespace OIC
                 return m_result;
             }
 
-            const PropertyData getPropertyData()
+            const PropertyData& getPropertyData()
             {
-                return m_PropertyData;
+                return m_propertyData;
             }
 
         private:
             ESResult m_result;
-            PropertyData m_PropertyData;
+            PropertyData m_propertyData;
         };
 
         class DataProvisioningStatus
         {
         public:
-            DataProvisioningStatus(ESResult result, ESState esState) :
-                    m_result(result), m_esState(esState)
+            DataProvisioningStatus(ESResult result, ESDataProvState dataProvState) :
+                    m_result(result), m_state(dataProvState)
             {
             }
 
@@ -292,14 +292,14 @@ namespace OIC
                 return m_result;
             }
 
-            ESState getESState()
+            ESDataProvState getESDataProvState()
             {
-                return m_esState;
+                return m_state;
             }
 
         private:
             ESResult m_result;
-            ESState m_esState;
+            ESDataProvState m_state;
         };
 
         class CloudProvisioningStatus
@@ -343,7 +343,7 @@ namespace OIC
         /**
          * Callback function definition for providing Enrollee security status .
          */
-        typedef function< void(shared_ptr<SecProvisioningStatus>) > EnrolleeSecStatusCb;
+        typedef function< void(shared_ptr<SecProvisioningStatus>) > SecurityProvStatusCb;
 
         /**
          * Callback definition to be invoked when the security stack expects a pin from application.
index 13fd624..face112 100755 (executable)
@@ -45,13 +45,13 @@ namespace OIC
         public:
             EnrolleeSecurity(std::shared_ptr< EnrolleeResource > EnrolleeResource,
             std::string secDbPath);
-            ESResult registerCallbackHandler(EnrolleeSecStatusCb enrolleeSecStatusCb,
+            ESResult registerCallbackHandler(SecurityProvStatusCb securityProvStatusCb,
                     SecurityPinCb securityPinCb, SecProvisioningDbPathCb secProvisioningDbPathCb);
             bool performOwnershipTransfer();
 
         private:
             std::shared_ptr< EnrolleeResource > m_EnrolleeResource;
-            EnrolleeSecStatusCb m_enrolleeSecStatusCb;
+            SecurityProvStatusCb m_securityProvStatusCb;
             SecurityPinCb m_securityPinCb;
             SecProvisioningDbPathCb m_secProvisioningDbPathCb;
             std::shared_ptr< OC::OCSecureResource > m_unownedDevice;
index d329289..cbc5ac2 100755 (executable)
@@ -89,7 +89,7 @@ namespace OIC
              *
              * @see RemoteEnrollee
              */
-            void startSecurityProvisioning(EnrolleeSecStatusCb callback);
+            void startSecurityProvisioning(SecurityProvStatusCb callback);
 
             /**
              * Start provisioning of target Enrollers information to the Enrollee.
@@ -130,7 +130,7 @@ namespace OIC
             void RequestPropertyDataStatusHandler (std::shared_ptr< RequestPropertyDataStatus > status);
             void dataProvisioningStatusHandler (std::shared_ptr< DataProvisioningStatus > status);
             void cloudProvisioningStatusHandler (std::shared_ptr< CloudProvisioningStatus > status);
-            void easySetupSecurityStatusCallback(std::shared_ptr< SecProvisioningStatus > status);
+            void securityStatusHandler(std::shared_ptr< SecProvisioningStatus > status);
 
         private:
             std::shared_ptr< OC::OCResource > m_ocResource;
@@ -141,8 +141,8 @@ namespace OIC
             std::string  m_deviceId;
             bool m_discoveryResponse;
 
-            EnrolleeSecStatusCb m_enrolleeSecStatusCb;
-            RequestPropertyDataStatusCb m_RequestPropertyDataStatusCb;
+            SecurityProvStatusCb m_securityProvStatusCb;
+            RequestPropertyDataStatusCb m_requestPropertyDataStatusCb;
             SecurityPinCb m_securityPinCb;
             SecProvisioningDbPathCb m_secProvisioningDbPathCb;
             DataProvStatusCb m_dataProvStatusCb;
index 07b4ea8..a79e93f 100755 (executable)
@@ -50,7 +50,7 @@ namespace OIC
                 OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG,
                         "checkProvInformationCb : Provisioning is failed ");
                 std::shared_ptr< DataProvisioningStatus > provStatus = std::make_shared<
-                        DataProvisioningStatus >(ESResult::ES_ERROR, ESState::ES_PROVISIONING_ERROR);
+                        DataProvisioningStatus >(ESResult::ES_ERROR, ESDataProvState::ES_PROVISIONING_ERROR);
                 m_dataProvStatusCb(provStatus);
                 return;
             }
@@ -63,7 +63,7 @@ namespace OIC
                     "Now trigger network connection ");
 
             std::shared_ptr< DataProvisioningStatus > provStatus = std::make_shared<
-                    DataProvisioningStatus >(ESResult::ES_OK, ESState::ES_PROVISIONING_SUCCESS);
+                    DataProvisioningStatus >(ESResult::ES_OK, ESDataProvState::ES_PROVISIONING_SUCCESS);
             m_dataProvStatusCb(provStatus);
         }
 
@@ -122,7 +122,7 @@ namespace OIC
                     result = ESResult::ES_UNAUTHORIZED;
                 }
                 std::shared_ptr< DataProvisioningStatus > provStatus = std::make_shared<
-                        DataProvisioningStatus >(result, ESState::ES_PROVISIONING_ERROR);
+                        DataProvisioningStatus >(result, ESDataProvState::ES_PROVISIONING_ERROR);
                 m_dataProvStatusCb(provStatus);
 
                 return;
@@ -174,7 +174,7 @@ namespace OIC
                 OIC_LOG_V (DEBUG, ES_REMOTE_ENROLLEE_RES_TAG,
                         "getProvStatusResponse : Provisioning is successful");
                 std::shared_ptr< DataProvisioningStatus > provStatus = std::make_shared<
-                        DataProvisioningStatus >(ESResult::ES_OK, ESState::ES_PROVISIONED_ALREADY);
+                        DataProvisioningStatus >(ESResult::ES_OK, ESDataProvState::ES_PROVISIONED_ALREADY);
                 m_dataProvStatusCb(provStatus);
             }
         }
@@ -249,7 +249,7 @@ namespace OIC
             if (result != OCStackResult::OC_STACK_OK)
             {
                 std::shared_ptr< DataProvisioningStatus > provStatus = std::make_shared<
-                        DataProvisioningStatus >(ESResult::ES_ERROR, ESState::ES_PROVISIONING_ERROR);
+                        DataProvisioningStatus >(ESResult::ES_ERROR, ESDataProvState::ES_PROVISIONING_ERROR);
                 m_dataProvStatusCb(provStatus);
                 return;
             }
index fea39d2..7c5972f 100755 (executable)
@@ -54,11 +54,11 @@ namespace OIC
             m_EnrolleeResource = EnrolleeResource;
         }
 
-        ESResult EnrolleeSecurity::registerCallbackHandler(EnrolleeSecStatusCb enrolleeSecStatusCb,
+        ESResult EnrolleeSecurity::registerCallbackHandler(SecurityProvStatusCb securityProvStatusCb,
                 SecurityPinCb securityPinCb, SecProvisioningDbPathCb secProvisioningDbPathCb)
 
         {
-            m_enrolleeSecStatusCb = enrolleeSecStatusCb;
+            m_securityProvStatusCb = securityProvStatusCb;
             m_securityPinCb = securityPinCb;
             m_secProvisioningDbPathCb = secProvisioningDbPathCb;
 
@@ -114,7 +114,7 @@ namespace OIC
                 securityProvisioningStatus = std::make_shared< SecProvisioningStatus >(uuid,
                         ES_ERROR);
 
-                m_enrolleeSecStatusCb(securityProvisioningStatus);
+                m_securityProvStatusCb(securityProvisioningStatus);
                 return;
             }
             else
@@ -131,7 +131,7 @@ namespace OIC
                     securityProvisioningStatus = std::make_shared< SecProvisioningStatus >(uuid,
                             ES_OK);
 
-                    m_enrolleeSecStatusCb(securityProvisioningStatus);
+                    m_securityProvStatusCb(securityProvisioningStatus);
                     return;
                 }
 
index 28a6287..ea286c4 100755 (executable)
@@ -39,8 +39,8 @@ namespace OIC
 
         RemoteEnrollee::RemoteEnrollee()
         {
-            m_enrolleeSecStatusCb = nullptr;
-            m_RequestPropertyDataStatusCb = nullptr;
+            m_securityProvStatusCb = nullptr;
+            m_requestPropertyDataStatusCb = nullptr;
             m_securityPinCb = nullptr;
             m_secProvisioningDbPathCb = nullptr;
             m_dataProvStatusCb = nullptr;
@@ -64,27 +64,27 @@ namespace OIC
         }
 #endif //__WITH_DTLS__
 
-        void RemoteEnrollee::easySetupSecurityStatusCallback(
+        void RemoteEnrollee::securityStatusHandler(
                         std::shared_ptr< SecProvisioningStatus > status)
         {
             OIC_LOG_V(DEBUG, ES_REMOTE_ENROLLEE_TAG, "easySetupStatusCallback status is, UUID = %s, "
                     "Status = %d", status->getDeviceUUID().c_str(),
-                    status->getResult());
+                    status->getESResult());
 
-            if(status->getResult() == ES_OK)
+            if(status->getESResult() == ES_OK)
             {
                 OIC_LOG(DEBUG, ES_REMOTE_ENROLLEE_TAG, "Ownership and ACL are successful. "
                         "Continue with Network information provisioning");
 
                 OIC_LOG(DEBUG,ES_REMOTE_ENROLLEE_TAG,"Before ProvisionEnrollee");
 
-                m_enrolleeSecStatusCb(status);
+                m_securityProvStatusCb(status);
             }
             else
             {
                 OIC_LOG(DEBUG, ES_REMOTE_ENROLLEE_TAG, "Ownership and ACL are fail");
 
-                m_enrolleeSecStatusCb(status);
+                m_securityProvStatusCb(status);
             }
         }
 
@@ -100,7 +100,7 @@ namespace OIC
                 m_propertyData = status->getPropertyData();
             }
 
-            m_RequestPropertyDataStatusCb(status);
+            m_requestPropertyDataStatusCb(status);
         }
 
         void RemoteEnrollee::dataProvisioningStatusHandler(
@@ -112,7 +112,7 @@ namespace OIC
 
             if (status->getESResult() == ES_OK)
             {
-                if (status->getESState() >= ESState::ES_PROVISIONED_ALREADY)
+                if (status->getESDataProvState() >= ESDataProvState::ES_PROVISIONED_ALREADY)
                 {
                     OIC_LOG_V(DEBUG,ES_REMOTE_ENROLLEE_TAG,"ProvStatus = %d", status->getESResult());
                 }
@@ -305,14 +305,14 @@ namespace OIC
             }
         }
 
-        void RemoteEnrollee::startSecurityProvisioning(EnrolleeSecStatusCb callback)
+        void RemoteEnrollee::startSecurityProvisioning(SecurityProvStatusCb callback)
         {
 #ifdef __WITH_DTLS__
 
-            m_enrolleeSecStatusCb = callback;
+            m_securityProvStatusCb = callback;
 
-            EnrolleeSecStatusCb securityProvStatusCb = std::bind(
-                    &RemoteEnrollee::easySetupSecurityStatusCallback,
+            SecurityProvStatusCb securityProvStatusCb = std::bind(
+                    &RemoteEnrollee::securityStatusHandler,
                     this,
                     std::placeholders::_1);
             //TODO : DBPath is passed empty as of now. Need to take dbpath from application.
@@ -328,7 +328,7 @@ namespace OIC
                     OIC_LOG(DEBUG,ES_REMOTE_ENROLLEE_TAG,"Fail performOwnershipTransfer");
                     std::shared_ptr< SecProvisioningStatus > securityProvisioningStatus =
                             std::make_shared< SecProvisioningStatus >(nullptr, ES_ERROR);
-                    m_enrolleeSecStatusCb(securityProvisioningStatus);
+                    m_securityProvStatusCb(securityProvisioningStatus);
                     return;
                 }
             }
@@ -343,7 +343,7 @@ namespace OIC
 
             std::shared_ptr< SecProvisioningStatus > securityProvisioningStatus =
                      std::make_shared< SecProvisioningStatus >(nullptr, ES_ERROR);
-            m_enrolleeSecStatusCb(securityProvisioningStatus);
+            m_securityProvStatusCb(securityProvisioningStatus);
 #endif
         }
 
@@ -354,7 +354,7 @@ namespace OIC
                 throw ESInvalidParameterException("Callback is empty");
             }
 
-            m_RequestPropertyDataStatusCb = callback;
+            m_requestPropertyDataStatusCb = callback;
 
             if (m_enrolleeResource == nullptr)
             {
index 20ea7b7..289c07f 100755 (executable)
@@ -67,7 +67,7 @@ int processUserInput(int min = std::numeric_limits<int>::min(),
 void printPropertyData(PropertyData propData)
 {
     cout << "===========================================" << endl;
-    DeviceConfig devConfig = propData.getDevInfo();
+    DeviceConfig devConfig = propData.getDevConf();
     NetworkInfo netInfo = propData.getNetInfo();
     bool cloudable = propData.isCloudable();
 
@@ -112,7 +112,7 @@ void dataProvisioningStatusCallback(std::shared_ptr< DataProvisioningStatus > pr
     else
     {
       cout << "dataProvisioningStatusCallback is success." << endl;
-      cout << "ESState : " << provStatus->getESState() << endl;
+      cout << "ESDataProvState : " << provStatus->getESDataProvState() << endl;
     }
 }