IoTivity Security bug fix and enable security api usage in easysetup Android app
authorsaurabh.s9 <saurabh.s9@samsung.com>
Mon, 29 Feb 2016 08:10:52 +0000 (13:40 +0530)
committerMadan Lanka <lanka.madan@samsung.com>
Tue, 1 Mar 2016 04:29:51 +0000 (04:29 +0000)
- IoTivity bug is fixed by changing IoTivity security libraries from static to dynamic
  https://jira.iotivity.org/browse/IOT-956
- Enabled Security api usage in Easysetup Android app

Change-Id: Id4296c724968cdfe52c673e5ea1696afa0346238
Signed-off-by: lankamadan <lanka.madan@samsung.com>
Signed-off-by: saurabh.s9 <saurabh.s9@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/5181
Reviewed-by: Ashwini Kumar <k.ashwini@samsung.com>
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
14 files changed:
android/android_api/base/jni/Android.mk
resource/csdk/security/provisioning/SConscript
resource/provisioning/SConscript [changed mode: 0644->0755]
resource/provisioning/examples/SConscript
resource/provisioning/unittests/SConscript [changed mode: 0644->0755]
service/easy-setup/mediator/csdk/SConscript
service/easy-setup/mediator/richsdk/SConscript
service/easy-setup/mediator/richsdk/android/EasySetupCore/src/main/java/org/iotivity/service/easysetup/mediator/EasySetupService.java
service/easy-setup/mediator/richsdk/android/jni/Android.mk
service/easy-setup/sampleapp/enrollee/linux/SConscript
service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample/enrolleewifi.cpp
service/easy-setup/sampleapp/mediator/android/EasySetup/app/src/main/java/org/iotivity/service/easysetup/MainActivity.java
service/easy-setup/sampleapp/mediator/android/EasySetup/app/src/main/res/layout/activity_main.xml [changed mode: 0644->0755]
tools/tizen/.gbs.conf [changed mode: 0644->0755]

index e07b671..0381ca4 100644 (file)
@@ -30,14 +30,14 @@ 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)
+LOCAL_SRC_FILES := $(OIC_LIB_PATH)/libocprovision.so
+include $(PREBUILT_SHARED_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)
+LOCAL_SRC_FILES := $(OIC_LIB_PATH)/libocpmapi.so
+include $(PREBUILT_SHARED_LIBRARY)
 endif
 
 include $(CLEAR_VARS)\r
index 0fcd36e..0e741c4 100644 (file)
@@ -62,7 +62,7 @@ if target_os not in ['windows', 'winrt']:
        # Note: 'pthread' is in libc for android. On other platform, if use
        # new gcc(>4.9?) it isn't required, otherwise, it's required
        if target_os != 'android':
-               provisioning_env.AppendUnique(LIBS = ['-lpthread'])
+               provisioning_env.AppendUnique(LIBS = ['-lpthread', '-ldl'])
 
 
 provisioning_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
@@ -73,7 +73,10 @@ provisioning_env.AppendUnique(LIBS = ['tinydtls'])
 if env.get('DTLS_WITH_X509') == '1':
        provisioning_env.AppendUnique(LIBS = ['CKManger'])
 
-provisioning_env.ParseConfig('pkg-config --libs glib-2.0');
+#TODO : Have to remove this comment after 1st level of review
+#This change needs a review.
+if target_os != 'android':
+       provisioning_env.ParseConfig('pkg-config --libs glib-2.0');
 
 if target_os == 'android':
        provisioning_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions'])
@@ -98,7 +101,7 @@ provisioning_src = [
        'src/oxmrandompin.c',
        'src/provisioningdatabasemanager.c',
        root_dir+'/extlibs/sqlite3/sqlite3.c' ]
-provisioningserver = provisioning_env.StaticLibrary('ocpmapi', provisioning_src)
+provisioningserver = provisioning_env.SharedLibrary('ocpmapi', provisioning_src)
 
 provisioning_env.InstallTarget(provisioningserver, 'libocpmapi')
 
old mode 100644 (file)
new mode 100755 (executable)
index a7c035d..ecda825
@@ -43,7 +43,11 @@ if target_os not in ['windows', 'winrt']:
 if target_os == 'android':
        ocprovision_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions'])
        ocprovision_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
-       ocprovision_env.AppendUnique(LIBS = ['ocspapi', 'octbstack', 'oc_logger', 'boost_thread', 'gnustl_shared', 'log'])
+       ocprovision_env.AppendUnique(LIBS = ['oc', 'ocpmapi', 'oc_logger', 'boost_thread', 'gnustl_shared', 'log'])
+
+if target_os == 'linux':
+       ocprovision_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
+        ocprovision_env.AppendUnique(LIBS = ['oc', 'octbstack', 'ocpmapi', 'oc_logger', 'boost_thread'])
 
 if target_os in ['darwin', 'ios']:
        ocprovision_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
@@ -56,7 +60,7 @@ ocprovision_src = [
                'src/OCProvisioningManager.cpp'
        ]
 
-ocprovision = ocprovision_env.StaticLibrary('ocprovision', ocprovision_src)
+ocprovision = ocprovision_env.SharedLibrary('ocprovision', ocprovision_src)
 ocprovision_env.InstallTarget(ocprovision, 'libocprovision')
 
 if target_os in ['linux']:
index 184a73a..e701b47 100644 (file)
@@ -26,6 +26,9 @@ Import('env')
 lib_env = env.Clone()
 SConscript(env.get('SRC_DIR') + '/resource/third_party_libs.scons', 'lib_env')
 
+with_ra = env.get('WITH_RA')
+with_ra_ibb = env.get('WITH_RA_IBB')
+
 examples_env = lib_env.Clone()
 
 ######################################################################
@@ -55,8 +58,19 @@ examples_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
 examples_env.AppendUnique(RPATH = [env.get('BUILD_DIR')])
 examples_env.PrependUnique(LIBS = ['ocprovision', 'oc', 'ocpmapi', 'octbstack',
                                     'oc_logger', 'connectivity_abstraction', 'coap'])
+if with_ra_ibb:
+       examples_env.AppendUnique(LIBS = examples_env['RALIBS'], LIBPATH = examples_env['RALIBPATH'], RPATH = examples_env['RARPATH'])
+       print "RALIBS = %s" % examples_env['RALIBS']
+       print "RALIBPATH = %s" % examples_env['RALIBPATH']
+       print "RARPATH = %s" % examples_env['RARPATH']
+       examples_env.AppendUnique(LIBS = 'wksxmppxep')
+else :
+       if with_ra:
+               examples_env.AppendUnique(LIBS = ['ra_xmpp'])
+
 if env.get('SECURED') == '1':
     examples_env.AppendUnique(LIBS = ['tinydtls'])
+    examples_env.AppendUnique(LIBS = ['timer'])
 if env.get('DTLS_WITH_X509') == '1':
        examples_env.AppendUnique(LIBS = ['CKManager'])
        examples_env.AppendUnique(LIBS = ['asn1'])
old mode 100644 (file)
new mode 100755 (executable)
index 20f2a19..3582960
@@ -24,6 +24,8 @@ import os.path
 provisiontests_env = env.Clone()
 
 src_dir = provisiontests_env.get('SRC_DIR')
+with_ra = env.get('WITH_RA')
+with_ra_ibb = env.get('WITH_RA_IBB')
 ######################################################################
 # Build flags
 ######################################################################
@@ -62,8 +64,18 @@ provisiontests_env.PrependUnique(LIBS = [
                'gtest_main',
                ])
 
+if with_ra_ibb:
+       provisiontests_env.AppendUnique(LIBS = provisiontests_env['RALIBS'], LIBPATH = provisiontests_env['RALIBPATH'], RPATH = provisiontests_env['RARPATH'])
+       print "RALIBS = %s" % provisiontests_env['RALIBS']
+       print "RALIBPATH = %s" % provisiontests_env['RALIBPATH']
+       print "RARPATH = %s" % provisiontests_env['RARPATH']
+else :
+       if with_ra:
+               provisiontests_env.AppendUnique(LIBS = ['ra_xmpp'])
+
 if env.get('SECURED') == '1':
     provisiontests_env.AppendUnique(LIBS = ['tinydtls'])
+    provisiontests_env.AppendUnique(LIBS = ['timer'])
 if env.get('DTLS_WITH_X509') == '1':
        provisiontests_env.AppendUnique(LIBS = ['CKManager'])
        provisiontests_env.AppendUnique(LIBS = ['asn1'])
index e68538f..675ab6b 100644 (file)
@@ -94,7 +94,7 @@ if target_os in ['android','linux']:
                env.get('SRC_DIR') + '/resource/c_common/oic_malloc/include',
                env.get('SRC_DIR') + '/resource/csdk/connectivity/common/inc',
                env.get('SRC_DIR') + '/resource/csdk/connectivity/api',
-        env.get('SRC_DIR') + '/resource/csdk/stack/include',
+               env.get('SRC_DIR') + '/resource/csdk/stack/include',
                env.get('SRC_DIR') + '/resource/csdk/security/include',
                env.get('SRC_DIR') + '/extlibs/cjson',
                env.get('SRC_DIR') + '/service/easy-setup/inc',
index 71364d0..c5d2317 100644 (file)
@@ -62,30 +62,36 @@ easy_setup_env.AppendUnique(CPPPATH = ['inc', 'src', '../../inc'])
 if target_os not in ['windows', 'winrt']:
     easy_setup_env.AppendUnique(CXXFLAGS = ['-Wall', '-std=c++0x'])
 
-if target_os == 'linux':
+if target_os in ['linux']:
    easy_setup_env.AppendUnique(LIBS = ['pthread', 'dl'])
 
 if target_os in ['android']:
        easy_setup_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
+       if env.get('SECURED') == '1':
+               easy_setup_env.AppendUnique(LIBPATH = [env.get('SRC_DIR')+'/android/android_api/base/libs/armeabi'])
        easy_setup_env.AppendUnique(RPATH = [env.get('BUILD_DIR')])
        easy_setup_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions'])
        easy_setup_env.PrependUnique(LIBS = ['oc', 'octbstack', 'oc_logger', 'connectivity_abstraction', 'gnustl_shared'])
+       if env.get('SECURED') == '1':
+               easy_setup_env.AppendUnique(LIBS = ['ocpmapi','ocprovision'])
        if not env.get('RELEASE'):
                easy_setup_env.AppendUnique(LIBS = ['log'])
 
-if target_os == 'linux':
+if target_os in ['linux']:
        easy_setup_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')])
        easy_setup_env.AppendUnique(RPATH = [env.get('BUILD_DIR')])
        easy_setup_env.AppendUnique(CXXFLAGS = ['-pthread'])
        easy_setup_env.PrependUnique(LIBS = ['oc', 'octbstack', 'oc_logger', 'pthread', 'connectivity_abstraction'])
+       if env.get('SECURED') == '1':
+               easy_setup_env.AppendUnique(LIBS = ['ocpmapi', 'ocprovision'])
 
 if target_os in ['android','linux']:
        easy_setup_env.PrependUnique(CPPPATH = [
                env.get('SRC_DIR') + '/resource/c_common/oic_malloc/include',
                env.get('SRC_DIR') + '/resource/include',
                env.get('SRC_DIR') + '/resource/csdk/logger/include',
-        env.get('SRC_DIR') + '/resource/csdk/stack/include',
-        env.get('SRC_DIR') + '/resource/csdk/logger/include',
+               env.get('SRC_DIR') + '/resource/csdk/stack/include',
+               env.get('SRC_DIR') + '/resource/csdk/logger/include',
                env.get('SRC_DIR') + '/resource/csdk/security/include',
                env.get('SRC_DIR') + '/extlibs/cjson',
                env.get('SRC_DIR') + '/extlibs/sqlite3',
@@ -96,8 +102,6 @@ if target_os in ['android','linux']:
                        env.get('SRC_DIR') + '/resource/csdk/security/provisioning/include',
                        env.get('SRC_DIR') + '/resource/csdk/security/provisioning/include/internal',
                        env.get('SRC_DIR') + '/resource/csdk/security/provisioning/include/oxm'])
-               easy_setup_env.PrependUnique(LIBS = ['ocprovision', 'ocpmapi'])
-
 
 ######################################################################
 # Source files and Targets
index 336edca..cdf60d5 100755 (executable)
@@ -57,9 +57,6 @@ public class EasySetupService {
 
     static {
         // Load Easy Setup JNI interface
-        System.loadLibrary("gnustl_shared");
-        System.loadLibrary("octbstack");
-        System.loadLibrary("connectivity_abstraction");
         System.loadLibrary("ESMediatorRich");
         System.loadLibrary("easysetup-jni");
     }
index 174daf2..87518ac 100644 (file)
@@ -2,14 +2,8 @@ LOCAL_PATH := $(call my-dir)
 
 include $(CLEAR_VARS)
 OIC_LIB_PATH := ../../../../../../out/android/$(TARGET_ARCH_ABI)/debug
-LOCAL_MODULE := android-octbstack
-LOCAL_SRC_FILES := $(OIC_LIB_PATH)/liboctbstack.so
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-OIC_LIB_PATH := ../../../../../../out/android/$(TARGET_ARCH_ABI)/debug
-LOCAL_MODULE := android-connectivity_abstraction
-LOCAL_SRC_FILES := $(OIC_LIB_PATH)/libconnectivity_abstraction.so
+LOCAL_MODULE := android-oc
+LOCAL_SRC_FILES := $(OIC_LIB_PATH)/liboc.so
 include $(PREBUILT_SHARED_LIBRARY)
 
 include $(CLEAR_VARS)
@@ -59,8 +53,8 @@ LOCAL_SRC_FILES += $(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/*.cpp
 LOCAL_SRC_FILES += $(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/*.h))
 
 LOCAL_LDLIBS := -llog
-LOCAL_SHARED_LIBRARIES += android-connectivity_abstraction
-LOCAL_SHARED_LIBRARIES += android-octbstack
+#LOCAL_SHARED_LIBRARIES += android-connectivity_abstraction
+LOCAL_SHARED_LIBRARIES += android-oc
 LOCAL_SHARED_LIBRARIES += android-easysetup
 
 include $(BUILD_SHARED_LIBRARY)
index 03d77fb..6ae239c 100644 (file)
@@ -56,6 +56,8 @@ enrollee_env.PrependUnique(CPPPATH = [
         env.get('SRC_DIR') + '/service/easy-setup/enrollee/src'])
 
 enrollee_env.PrependUnique(LIBS = ['oc', 'octbstack', 'oc_logger', 'ocsrm', 'pthread', 'connectivity_abstraction','coap', 'ESEnrolleeSDK'])
+if enrollee_env.get('SECURED') == '1':
+       enrollee_env.PrependUnique(LIBS = ['ocpmapi', 'ocprovision'])
 
 enrollee = enrollee_env.Program('enrollee', 'enrolleewifi.cpp')
 
index 31b304f..caf0020 100755 (executable)
@@ -50,6 +50,9 @@ static char passwd[] = "EasySetup123";
  */
 static char CRED_FILE[] = "oic_svr_db_server.json";
 
+OCPersistentStorage ps ;
+
+
 /**
  * @var gIsSecured
  * @brief Variable to check if secure mode is enabled or not.
@@ -59,8 +62,8 @@ static bool gIsSecured = false;
 void PrintMenu()
 {
     cout<<"============"<<endl;
-    cout<<"I: Init easy setup"<<endl;
     cout<<"S: Enabled Security"<<endl;
+    cout<<"I: Init easy setup"<<endl;
     cout<<"P: start provisioning resources"<<endl;
     cout<<"T: terminate"<<endl;
     cout<<"Q: quit"<<endl;
@@ -111,7 +114,7 @@ void EnableSecurity()
     gIsSecured = true;
 
     // Initialize Persistent Storage for SVR database
-    OCPersistentStorage ps = { server_fopen, fread, fwrite, fclose, unlink };
+    ps = { server_fopen, fread, fwrite, fclose, unlink };
     OCRegisterPersistentStorageHandler(&ps);
 }
 
@@ -124,12 +127,6 @@ void StartEasySetup()
         cout<<"StartEasySetup and onboarding Fail!!"<<endl;
         return;
     }
-
-    pthread_t thread_handle;
-    if (pthread_create(&thread_handle, NULL, listeningFunc, NULL))
-    {
-        cout<<"Thread creation failed"<<endl;
-    }
 }
 
 void StartOICStackAndStartResources()
@@ -149,6 +146,12 @@ void StartOICStackAndStartResources()
         return;
     }
 
+    pthread_t thread_handle;
+    if (pthread_create(&thread_handle, NULL, listeningFunc, NULL))
+    {
+        cout<<"Thread creation failed"<<endl;
+    }
+
     cout<<"InitProvisioning Success"<<endl;
 }
 
@@ -195,16 +198,16 @@ int main()
                 cout<<"quit";
                 break;
 
-            case 'I': // Init EasySetup
-            case 'i':
-                StartEasySetup();
-                break;
-
             case 'S': // Enable Security
             case 's':
                 EnableSecurity();
                 break;
 
+            case 'I': // Init EasySetup
+            case 'i':
+                StartEasySetup();
+                break;
+
             case 'P': // start provisioning
             case 'p':
                 StartOICStackAndStartResources();
index cb3827d..3735dc3 100755 (executable)
 \r
 package org.iotivity.service.easysetup;\r
 \r
-import org.iotivity.service.easysetup.mediator.EasySetupService;\r
-import org.iotivity.service.easysetup.mediator.EasySetupStatus;\r
-import org.iotivity.service.easysetup.mediator.EnrolleeDevice;\r
-import org.iotivity.service.easysetup.mediator.IpOnBoardingConnection;\r
-import org.iotivity.service.easysetup.mediator.EnrolleeDeviceFactory;\r
-import org.iotivity.service.easysetup.mediator.WiFiOnBoardingConfig;\r
-import org.iotivity.service.easysetup.mediator.WiFiProvConfig;\r
-\r
 import android.app.Activity;\r
 import android.app.AlertDialog;\r
 import android.content.DialogInterface;\r
 import android.content.Intent;\r
+import android.content.SharedPreferences;\r
+import android.database.sqlite.SQLiteDatabase;\r
 import android.net.ConnectivityManager;\r
 import android.net.NetworkInfo;\r
 import android.net.wifi.WifiConfiguration;\r
@@ -41,6 +35,7 @@ import android.net.wifi.WifiManager;
 import android.os.Bundle;\r
 import android.os.Handler;\r
 import android.os.Message;\r
+import android.preference.PreferenceManager;\r
 import android.util.Log;\r
 import android.view.View;\r
 import android.view.View.OnClickListener;\r
@@ -53,13 +48,46 @@ import android.widget.RelativeLayout;
 import android.widget.TextView;\r
 import android.widget.Toast;\r
 \r
+import org.iotivity.base.ModeType;\r
+import org.iotivity.base.OcException;\r
+import org.iotivity.base.OcPlatform;\r
+import org.iotivity.base.OcProvisioning;\r
+import org.iotivity.base.PlatformConfig;\r
+import org.iotivity.base.QualityOfService;\r
+import org.iotivity.base.ServiceType;\r
+import org.iotivity.service.easysetup.mediator.EasySetupService;\r
+import org.iotivity.service.easysetup.mediator.EasySetupStatus;\r
+import org.iotivity.service.easysetup.mediator.EnrolleeDevice;\r
+import org.iotivity.service.easysetup.mediator.IpOnBoardingConnection;\r
+import org.iotivity.service.easysetup.mediator.EnrolleeDeviceFactory;\r
+import org.iotivity.service.easysetup.mediator.WiFiOnBoardingConfig;\r
+import org.iotivity.service.easysetup.mediator.WiFiProvConfig;\r
+\r
+import java.io.File;\r
+import java.io.FileNotFoundException;\r
+import java.io.FileOutputStream;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.io.OutputStream;\r
+\r
+\r
 public class MainActivity extends Activity {\r
+    private static final String TAG = "Easysetup Mediator: ";\r
 \r
     /* Status to update the UI */\r
     public static final int SUCCESS       = 0;\r
     public static final int FAILED        = 1;\r
     public static final int STATE_CHANGED = 2;\r
 \r
+    public static final String OIC_CLIENT_JSON_DB_FILE =  "oic_svr_db_client.json";\r
+    public static final String OIC_SQL_DB_FILE =  "PDM.db";\r
+\r
+    private static final int BUFFER_SIZE = 1024;\r
+    private String filePath = "";\r
+    //create platform config\r
+    PlatformConfig cfg;\r
+\r
+\r
     String                  mSoftAPSsid;\r
     String                  mSoftAPPassword;\r
     String                  mEnrollerSsid;\r
@@ -81,6 +109,7 @@ public class MainActivity extends Activity {
 \r
     RadioButton             mEnrollee;\r
     RadioButton             mMediator;\r
+    RadioButton             mEnableSecurity;\r
 \r
     LinearLayout            mSoftAP;\r
     RelativeLayout          mDeviceInfo;\r
@@ -122,6 +151,7 @@ public class MainActivity extends Activity {
 \r
         mEnrollee = (RadioButton) findViewById(R.id.enrollee);\r
         mMediator = (RadioButton) findViewById(R.id.mediator);\r
+        mEnableSecurity = (RadioButton) findViewById(R.id.enablesecurity);\r
 \r
         mStartButton = (Button) findViewById(R.id.startSetup);\r
 \r
@@ -132,6 +162,7 @@ public class MainActivity extends Activity {
         /* Create EnrolleeDevice Factory instance */\r
         mDeviceFactory = EnrolleeDeviceFactory\r
                 .newInstance(getApplicationContext());\r
+\r
         addListenerForStartAP();\r
         addListenerForStopAP();\r
 \r
@@ -155,7 +186,7 @@ public class MainActivity extends Activity {
                         .setPositiveButton("Yes",\r
                                 new DialogInterface.OnClickListener() {\r
                                     public void onClick(DialogInterface dialog,\r
-                                            int id) {\r
+                                                        int id) {\r
                                         MainActivity.this\r
                                                 .startActivity(new Intent(\r
                                                         WifiManager.ACTION_PICK_WIFI_NETWORK));\r
@@ -171,7 +202,7 @@ public class MainActivity extends Activity {
                         .setNegativeButton("No",\r
                                 new DialogInterface.OnClickListener() {\r
                                     public void onClick(DialogInterface dialog,\r
-                                            int id) {\r
+                                                        int id) {\r
                                         mEnrollee.setChecked(false);\r
                                         mStartButton.setEnabled(false);\r
                                         dialog.cancel();\r
@@ -199,6 +230,25 @@ public class MainActivity extends Activity {
             }\r
         });\r
 \r
+        mEnableSecurity.setOnClickListener(new OnClickListener() {\r
+            @Override\r
+            public void onClick(View v) {\r
+                filePath = getFilesDir().getPath() + "/";\r
+\r
+                //copy json when application runs first time\r
+                SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences\r
+                        (getApplicationContext());\r
+                boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);\r
+                if (isFirstRun) {\r
+                    copyJsonFromAsset();\r
+                    SharedPreferences.Editor editor = wmbPreference.edit();\r
+                    editor.putBoolean("FIRSTRUN", false);\r
+                    editor.commit();\r
+                }\r
+\r
+                initOICStack();\r
+            }\r
+        });\r
         /* Create Easy Setup Service instance */\r
         mEasySetupService = EasySetupService.getInstance(\r
                 getApplicationContext(), new EasySetupStatus() {\r
@@ -222,6 +272,90 @@ public class MainActivity extends Activity {
                 });\r
     }\r
 \r
+    /**\r
+     * configure OIC platform and call findResource\r
+     */\r
+    private void initOICStack() {\r
+        cfg = new PlatformConfig(\r
+                this,\r
+                ServiceType.IN_PROC,\r
+                ModeType.CLIENT_SERVER,\r
+                "0.0.0.0", // bind to all available interfaces\r
+                0,\r
+                QualityOfService.LOW, filePath + OIC_CLIENT_JSON_DB_FILE);\r
+        OcPlatform.Configure(cfg);\r
+        try {\r
+            /*\r
+             * Initialize DataBase\r
+             */\r
+            String sqlDbPath = getFilesDir().getAbsolutePath().replace("files", "databases") +\r
+                    File.separator;\r
+            File file = new File(sqlDbPath);\r
+            //check files directory exists\r
+            if (!(file.isDirectory())) {\r
+                file.mkdirs();\r
+                Log.d(TAG, "Sql db directory created at " + sqlDbPath);\r
+            }\r
+            Log.d(TAG, "Sql db directory exists at " + sqlDbPath);\r
+\r
+            //SQLiteDatabase.openOrCreateDatabase(sqlDbPath+ OIC_SQL_DB_FILE, null);\r
+            OcProvisioning.provisionInit(sqlDbPath + OIC_SQL_DB_FILE);\r
+        } catch (OcException e) {\r
+            logMessage(TAG + "provisionInit error: " + e.getMessage());\r
+            Log.e(TAG, e.getMessage());\r
+        }\r
+    }\r
+    /**\r
+     * Copy svr db json file from assets folder to app data files dir\r
+     */\r
+    private void copyJsonFromAsset() {\r
+        InputStream inputStream = null;\r
+        OutputStream outputStream = null;\r
+        int length;\r
+        byte[] buffer = new byte[BUFFER_SIZE];\r
+        try {\r
+            inputStream = getAssets().open(OIC_CLIENT_JSON_DB_FILE);\r
+            File file = new File(filePath);\r
+            //check files directory exists\r
+            if (!(file.exists() && file.isDirectory())) {\r
+                file.mkdirs();\r
+            }\r
+            outputStream = new FileOutputStream(filePath + OIC_CLIENT_JSON_DB_FILE);\r
+            while ((length = inputStream.read(buffer)) != -1) {\r
+                outputStream.write(buffer, 0, length);\r
+            }\r
+        } catch (NullPointerException e) {\r
+            logMessage(TAG + "Null pointer exception " + e.getMessage());\r
+            Log.e(TAG, e.getMessage());\r
+        } catch (FileNotFoundException e) {\r
+            logMessage(TAG + "Json svr db file not found " + e.getMessage());\r
+            Log.e(TAG, e.getMessage());\r
+        } catch (IOException e) {\r
+            logMessage(TAG + OIC_CLIENT_JSON_DB_FILE + " file copy failed");\r
+            Log.e(TAG, e.getMessage());\r
+        } finally {\r
+            if (inputStream != null) {\r
+                try {\r
+                    inputStream.close();\r
+                } catch (IOException e) {\r
+                    Log.e(TAG, e.getMessage());\r
+                }\r
+            }\r
+            if (outputStream != null) {\r
+                try {\r
+                    outputStream.close();\r
+                } catch (IOException e) {\r
+                    Log.e(TAG, e.getMessage());\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    public void logMessage(String text) {\r
+\r
+    }\r
+\r
+\r
     public void onDestroy() {\r
         super.onDestroy();\r
         /* Reset the Easy setup process */\r
@@ -248,6 +382,7 @@ public class MainActivity extends Activity {
 \r
                         mWiFiProvConfig = new WiFiProvConfig(mEnrollerSsid,\r
                                 mEnrollerPassword);\r
+                        mWiFiProvConfig.setSecured(true);\r
                         mDevice = mDeviceFactory\r
                                 .newEnrolleeDevice(mWiFiProvConfig);\r
                             Thread thread = new Thread() {\r
@@ -270,6 +405,7 @@ public class MainActivity extends Activity {
 \r
                         mWiFiProvConfig = new WiFiProvConfig(mEnrollerSsid,\r
                                 mEnrollerPassword);\r
+                        mWiFiProvConfig.setSecured(true);\r
                         mWiFiOnBoardingConfig = new WiFiOnBoardingConfig();\r
 \r
                         /*\r
old mode 100644 (file)
new mode 100755 (executable)
index 0620a58..5d02597
 
     </LinearLayout>
 
+    <RadioButton
+        android:layout_width="120dp"
+        android:layout_height="wrap_content"
+        android:text="Enable Security"
+        android:id="@+id/enablesecurity"
+        android:textStyle="bold"
+        android:layout_gravity="center_horizontal"
+        android:checked="false"/>
+
     <LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
old mode 100644 (file)
new mode 100755 (executable)