- 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>
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
# 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')])
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'])
'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')
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')])
'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']:
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()
######################################################################
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'])
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
######################################################################
'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'])
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',
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',
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
static {
// Load Easy Setup JNI interface
- System.loadLibrary("gnustl_shared");
- System.loadLibrary("octbstack");
- System.loadLibrary("connectivity_abstraction");
System.loadLibrary("ESMediatorRich");
System.loadLibrary("easysetup-jni");
}
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)
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)
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')
*/
static char CRED_FILE[] = "oic_svr_db_server.json";
+OCPersistentStorage ps ;
+
+
/**
* @var gIsSecured
* @brief Variable to check if secure mode is enabled or not.
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;
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);
}
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()
return;
}
+ pthread_t thread_handle;
+ if (pthread_create(&thread_handle, NULL, listeningFunc, NULL))
+ {
+ cout<<"Thread creation failed"<<endl;
+ }
+
cout<<"InitProvisioning Success"<<endl;
}
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();
\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
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
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
\r
RadioButton mEnrollee;\r
RadioButton mMediator;\r
+ RadioButton mEnableSecurity;\r
\r
LinearLayout mSoftAP;\r
RelativeLayout mDeviceInfo;\r
\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
/* Create EnrolleeDevice Factory instance */\r
mDeviceFactory = EnrolleeDeviceFactory\r
.newInstance(getApplicationContext());\r
+\r
addListenerForStartAP();\r
addListenerForStopAP();\r
\r
.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
.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
}\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
});\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
\r
mWiFiProvConfig = new WiFiProvConfig(mEnrollerSsid,\r
mEnrollerPassword);\r
+ mWiFiProvConfig.setSecured(true);\r
mDevice = mDeviceFactory\r
.newEnrolleeDevice(mWiFiProvConfig);\r
Thread thread = new Thread() {\r
\r
mWiFiProvConfig = new WiFiProvConfig(mEnrollerSsid,\r
mEnrollerPassword);\r
+ mWiFiProvConfig.setSecured(true);\r
mWiFiOnBoardingConfig = new WiFiOnBoardingConfig();\r
\r
/*\r
</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"